home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1997 #3 / Amiga Plus CD - 1997 - No. 03.iso / pd / programmierung / alienbreed3d2_src / cheesesauce / ab3edit < prev    next >
Text File  |  1997-01-31  |  78KB  |  5,376 lines

  1.  
  2.  
  3. maxscrdiv EQU 8
  4. max3ddiv EQU 5
  5. playerheight EQU 12*1024
  6. scrheight EQU 80
  7.  
  8. xpos EQU 0    ;l
  9. zpos EQU 4    ;l
  10. zsinval EQU 8    ;w
  11. zcosval EQU 10    ;w
  12. ztox EQU 12    ;l
  13. xsinval EQU 16    ;w
  14. xcosval EQU 18    ;w
  15. xspd EQU 20    ;w
  16. zspd EQU 22    ;w
  17. mapx EQU 24    ;b
  18. mapz EQU 25    ;b
  19. whichtile EQU 26 ;b
  20. xofflight EQU 28    ;w
  21. zofflight EQU 30    ;w
  22. offlight EQU 32        ;w
  23. zlinestore EQU 34
  24. zlinedir EQU 38
  25. zposdir EQU 40
  26. zposstore EQU 42
  27. xdiststore EQU 44
  28. xdistdir EQU 46
  29. zwallfound EQU 48
  30.  
  31. xlinestore EQU 50
  32. xlinedir EQU 54
  33. xposdir EQU 56
  34. xposstore EQU 58
  35. zdiststore EQU 60
  36. zdistdir EQU 62
  37. xwallfound EQU 64
  38.  
  39.  
  40. midoffset EQU 104*4*40
  41.  
  42.  SECTION Scrn,CODE
  43.  
  44. OpenLib         equ -552
  45. CloseLib        equ -414
  46.  
  47. vhposr        equ $006    
  48. vhposrl        equ $007 
  49. bltcon0        equ $40 
  50. bltcon1        equ $42
  51. bltcpt        equ $48
  52. bltbpt        equ $4c
  53. bltapt        equ $50
  54. spr0ctl        equ $142
  55. spr1ctl        equ $14a
  56. spr2ctl        equ $152
  57. spr3ctl        equ $15a
  58. spr4ctl        equ $162
  59. spr5ctl        equ $16a
  60. spr6ctl        equ $172
  61. spr7ctl        equ $17a
  62. spr0pos        equ $140
  63. spr1pos        equ $148
  64. spr2pos        equ $150
  65. spr3pos        equ $158
  66. spr4pos        equ $160
  67. spr5pos        equ $168
  68. spr6pos        equ $170
  69. spr7pos        equ $178
  70. bltdpt         equ $54
  71. bltafwm        equ $44
  72. bltalwm        equ $46
  73. bltsize         equ $58
  74. bltcmod         equ $60
  75. bltbmod         equ $62
  76. bltamod         equ $64
  77. bltdmod         equ $66
  78. diwstart        equ $8e         ; Screen hardware registers.
  79. diwstop         equ $90
  80. ddfstart        equ $92
  81. ddfstop         equ $94
  82. bplcon0         equ $100
  83. bplcon1         equ $102
  84. col0            equ $180
  85. col1            equ $182
  86. col2        equ $184
  87. col3        equ $186
  88. col4        equ $188
  89. col5        equ $18a
  90. col6        equ $18c
  91. col7        equ $18e
  92. col8            equ $190
  93. col9            equ $192
  94. col10           equ $194
  95. dmacon        equ $96
  96. dmaconr        equ $002
  97. intenar        equ $01c
  98. intena        equ $09a
  99. intreq        equ $09c
  100. intreqr        equ $01e
  101. intreqrl    equ $01f
  102. bpl1pth         equ $e0
  103. bpl1ptl         equ $e2
  104. bpl2pth        equ $e4
  105. bpl2ptl        equ $e6
  106. bpl3pth        equ $e8
  107. bpl3ptl        equ $ea
  108. bpl4pth        equ $ec
  109. bpl4ptl        equ $ee
  110. bpl5pth        equ $f0
  111. bpl5ptl        equ $f2
  112. bpl6pth        equ $f4
  113. bpl6ptl        equ $f6
  114. bpl7pth        equ $f8
  115. bpl7ptl        equ $fa
  116. spr0pth        equ $120
  117. spr0ptl        equ $122
  118. spr1pth        equ $124
  119. spr1ptl        equ $126
  120. spr2pth        equ $128
  121. spr2ptl        equ $12a
  122. spr3pth        equ $12c
  123. spr3ptl        equ $12e
  124. spr4pth        equ $130
  125. spr4ptl        equ $132
  126. spr5pth        equ $134
  127. spr5ptl        equ $136
  128. spr6pth        equ $138
  129. spr6ptl        equ $13a
  130. spr7pth        equ $13c
  131. spr7ptl        equ $13e
  132.  
  133.  
  134. ** This waits for the blitter to finish before allowing program
  135. ** execution to continue.
  136.  
  137. WB MACRO
  138. \@bf:
  139.  btst #6,dmaconr(a6)
  140.  bne.s \@bf
  141.  ENDM
  142.  
  143. *Another version for when d6 <> dff000
  144.  
  145. WBSLOW MACRO
  146. \@bf:
  147.  btst #6,$dff000+dmaconr
  148.  bne.s \@bf
  149.  ENDM
  150.  
  151.  
  152. **
  153.  
  154.  include "macros.i"
  155.  include "ab3:source/defs.i"
  156.  
  157.  move.w (a0)+,option
  158.  move.w (a0)+,option+2
  159.  
  160.  jmp stuff
  161. endstuff:
  162.  
  163.  move.l #$dff000,a6    ; NB V. IMPORTANT: A6=CUSTOM BASE
  164.  move.w #$87c0,dmacon(a6)
  165.  move.w #$8020,dmacon(a6)
  166.  move.w intenar(a6),saveinters
  167.  move.w #$7fff,intena(a6)
  168.  move.w #$00ff,$dff09e
  169.  
  170. *** Put myself in supervisor mode
  171.  
  172.  move.l #blag,$80
  173.  trap #0
  174. ; move.l $6c,d0
  175. ; move.l #blag,$6c
  176. ; move.w #$8010,intreq(a6)
  177.  
  178.  rts
  179.  
  180. saveit: ds.l 10
  181.  
  182.  
  183. blag:
  184. ; move.w #$10,intreq(a6)
  185. ; move.l d0,$6c
  186. ; move.w #$7fff,intena(a6)
  187.  
  188.  move.w #$20,$dff1dc
  189.  
  190.  move.l $6c,saveit
  191.  move.l #Chan0inter,$6c
  192.  jsr KInt_Init
  193.  
  194.  cmp.b #'k',option+3
  195.  bne.s nkb
  196.  st PLR1KEYS
  197.  clr.b PLR1PATH
  198.  clr.b PLR1MOUSE
  199. nkb:
  200.  cmp.b #'m',option+3
  201.  bne.s nmc
  202.  clr.b PLR1KEYS
  203.  clr.b PLR1PATH
  204.  st PLR1MOUSE
  205. nmc:
  206.  cmp.b #'p',option+3
  207.  bne.s nfp
  208.  clr.b PLR1KEYS
  209.  st.b PLR1PATH
  210.  clr.b PLR1MOUSE
  211. nfp:
  212.  
  213.  move.l #empty,pos1
  214.  move.l #empty,pos2
  215.  move.l #emptyend,Samp0end
  216.  move.l #emptyend,Samp1end
  217.  
  218.  move.l #nullspr,d0
  219.  move.w d0,s0l
  220.  move.w d0,s1l
  221.  move.w d0,s2l
  222.  move.w d0,s3l
  223.  move.w d0,s4l
  224.  move.w d0,s5l
  225.  move.w d0,s6l
  226.  move.w d0,s7l
  227.  swap d0
  228.  move.w d0,s0h
  229.  move.w d0,s1h
  230.  move.w d0,s2h
  231.  move.w d0,s3h
  232.  move.w d0,s4h
  233.  move.w d0,s5h
  234.  move.w d0,s6h
  235.  move.w d0,s7h 
  236.  
  237.  move.l #Panel,d0
  238.  move.w d0,p1l
  239.  swap d0
  240.  move.w d0,p1h
  241.  move.l #Panel+80*24,d0
  242.  move.w d0,p2l
  243.  swap d0
  244.  move.w d0,p2h
  245.  move.l #Panel+80*24*2,d0
  246.  move.w d0,p3l
  247.  swap d0
  248.  move.w d0,p3h
  249.  move.l #Panel+80*24*3,d0
  250.  move.w d0,p4l
  251.  swap d0
  252.  move.w d0,p4h
  253.  move.l #Panel+80*24*4,d0
  254.  move.w d0,p5l
  255.  swap d0
  256.  move.w d0,p5h
  257.  
  258. *******************************
  259. * TIMER SCREEN SETUP
  260.  move.l #TimerScr,d0
  261.  move.w d0,p1l
  262.  swap d0
  263.  move.w d0,p1h
  264.  move.w #$1201,Panelcon
  265.  
  266. ; move.l #borders,d0
  267. ; move.w d0,s0l
  268. ; swap d0
  269. ; move.w d0,s0h
  270. ; move.l #borders+2064,d0
  271. ; move.w d0,s1l
  272. ; swap d0
  273. ; move.w d0,s1h
  274. ; move.l #borders+2064*2,d0
  275. ; move.w d0,s2l
  276. ; swap d0
  277. ; move.w d0,s2h
  278. ; move.l #borders+2064*3,d0
  279. ; move.w d0,s3l
  280. ; swap d0
  281. ; move.w d0,s3h
  282.  
  283.  move.w #42*256+80,borders
  284.  move.w #42*256+2,borders+4
  285.  move.w #42*256+80,borders+2064
  286.  move.w #42*256+130,borders+4+2064
  287.  move.w #42*256+192,borders+2064*2
  288.  move.w #42*256+2,borders+4+2064*2
  289.  move.w #42*256+192,borders+2064*3
  290.  move.w #42*256+130,borders+4+2064*3
  291.  
  292.  move.l #FacePlace,d0
  293.  move.w d0,f1l
  294.  swap d0
  295.  move.w d0,f1h
  296.  move.l #FacePlace+32*24,d0
  297.  move.w d0,f2l
  298.  swap d0
  299.  move.w d0,f2h
  300.  move.l #FacePlace+32*24*2,d0
  301.  move.w d0,f3l
  302.  swap d0
  303.  move.w d0,f3h
  304.  move.l #FacePlace+32*24*3,d0
  305.  move.w d0,f4l
  306.  swap d0
  307.  move.w d0,f4h
  308.  move.l #FacePlace+32*24*4,d0
  309.  move.w d0,f5l
  310.  swap d0
  311.  move.w d0,f5h
  312.  
  313.  move.l #Blurb,d0
  314.  move.w d0,bl1l
  315.  swap d0
  316.  move.w d0,bl1h
  317.  
  318.  move.l #PanelCop,d0
  319.  move.w d0,pcl1
  320.  move.w d0,pcl2
  321.  swap d0
  322.  move.w d0,pch1
  323.  move.w d0,pch2
  324.  
  325.  move.l #bigfield,d0
  326.  move.w d0,ocl
  327.  swap d0
  328.  move.w d0,och
  329.  
  330.  bset.b #1,$bfe001
  331.  
  332.  move.l #bigfield,$dff080    ; Point the copper at our copperlist.
  333.  move.l #$dff000,a6    ; a6 points at the first custom chip register.
  334.  move.w #$00ff,$dff09e
  335.  
  336. ; move.l #Blurbfield,$dff080
  337.  
  338.  move.w #0,d0
  339.  
  340.  move.l #scrn,d0
  341.  move.w d0,pl1l
  342.  swap d0
  343.  move.w d0,pl1h
  344.  
  345.  move.l #scrn+40,d0
  346.  move.w d0,pl2l
  347.  swap d0
  348.  move.w d0,pl2h
  349.  
  350.  move.l #scrn+80,d0
  351.  move.w d0,pl3l
  352.  swap d0
  353.  move.w d0,pl3h
  354.  
  355.  move.l #scrn+120,d0
  356.  move.w d0,pl4l
  357.  swap d0
  358.  move.w d0,pl4h
  359.  
  360.  move.l #scrn+160,d0
  361.  move.w d0,pl5l
  362.  swap d0
  363.  move.w d0,pl5h
  364.  
  365.  move.l #scrn+200,d0
  366.  move.w d0,pl6l
  367.  swap d0
  368.  move.w d0,pl6h
  369.  
  370.  move.l #scrn+240,d0
  371.  move.w d0,pl7l
  372.  swap d0
  373.  move.w d0,pl7h
  374.  
  375.  move.l #colbars,a0
  376.  move.l #colbars2,a2
  377.  move.w #scrheight-1,d0
  378.  move.l #0,d6
  379.  move.w #1,d3
  380.  move.w #$2bdf,startwait
  381.  move.w #$2d01,endwait
  382. fillcop
  383.  move.w #$180,d1
  384.  
  385.  move.l a0,a1
  386.  move.l a2,a3
  387.  move.w #$10c,(a1)+
  388.  move.w #$10c,(a3)+
  389.  move.w d3,(a1)+
  390.  move.w d3,(a3)+
  391.  eor.w #$8000,d3
  392.  
  393.  move.w #$106,(a1)+
  394.  move.w #$106,(a3)+
  395.  move.w #$2c42,d5
  396.  or.w d3,d5
  397.  and.w #$fffe,d5
  398.  move.w d5,(a1)+
  399.  move.w d5,(a3)+
  400.  bsr do32
  401.  
  402.  move.w #$106,(a1)+
  403.  move.w #$106,(a3)+
  404.  move.w #$4c42,d5
  405.  or.w d3,d5
  406.  and.w #$fffe,d5
  407.  move.w d5,(a1)+
  408.  move.w d5,(a3)+
  409.  bsr do32
  410.  
  411.  move.w #$106,(a1)+
  412.  move.w #$106,(a3)+
  413.  move.w #$6c42,d5
  414.  or.w d3,d5
  415.  and.w #$fffe,d5
  416.  move.w d5,(a1)+
  417.  move.w d5,(a3)+
  418.  bsr do32
  419.  
  420. **********************************
  421.  
  422.  cmp.b #'s',option
  423.  beq.s smallscrn
  424.  
  425.  move.w startwait,(a1)+
  426.  move.w #$fffe,(a1)+
  427.  move.w endwait,(a1)+
  428.  move.w #$ff00,(a1)+
  429.  move.w startwait,(a3)+
  430.  move.w #$fffe,(a3)+
  431.  move.w endwait,(a3)+
  432.  move.w #$ff00,(a3)+
  433.  
  434.  add.w #$300,startwait
  435.  add.w #$300,endwait
  436.  
  437. smallscrn: 
  438. **********************************
  439.  
  440.  adda.w #104*4,a0
  441.  adda.w #104*4,a2
  442.  
  443.  dbra d0,fillcop
  444.  
  445. **********************************
  446.  cmp.b #'s',option
  447.  beq smallnotlarge
  448.  move.w #$38,fetchstart
  449.  move.w #$b8,fetchstop
  450.  move.w #$2c81,winstart
  451.  move.w #$2cc1,winstop
  452.  move.w #-40,modulo
  453.  move.w #-40,modulo+4
  454.  
  455.  move.l #scrn+40,a0
  456.  move.l #scrn+160,a1
  457.  move.l #scrn+280,a2
  458.  move.l #scrntab,a3
  459.  move.w #319,d7    ; counter
  460.  move.w #0,d1    ; xpos
  461. plotscrnloop:
  462.  move.b (a3)+,d0
  463.  move.w d1,d2
  464.  asr.w #3,d2
  465.  move.b d1,d3
  466.  not.b d3
  467.  bclr.b d3,-40(a0,d2.w)
  468.  bclr.b d3,(a0,d2.w)
  469.  bclr.b d3,40(a0,d2.w)
  470.  bclr.b d3,-40(a1,d2.w)
  471.  bclr.b d3,(a1,d2.w)
  472.  bclr.b d3,40(a1,d2.w)
  473.  bclr.b d3,-40(a2,d2.w)
  474.  btst #0,d0
  475.  beq.s nobp1
  476.  bset.b d3,-40(a0,d2.w)
  477. nobp1:
  478.  btst #1,d0
  479.  beq.s nobp2
  480.  bset.b d3,(a0,d2.w)
  481. nobp2:
  482.  btst #2,d0
  483.  beq.s nobp3
  484.  bset.b d3,40(a0,d2.w)
  485. nobp3:
  486.  btst #3,d0
  487.  beq.s nobp4
  488.  bset.b d3,-40(a1,d2.w)
  489. nobp4:
  490.  btst #4,d0
  491.  beq.s nobp5
  492.  bset.b d3,(a1,d2.w)
  493. nobp5:
  494.  btst #5,d0
  495.  beq.s nobp6
  496.  bset.b d3,40(a1,d2.w)
  497. nobp6:
  498.  btst #6,d0
  499.  beq.s nobp7
  500.  bset.b d3,-40(a2,d2.w)
  501. nobp7:
  502.  
  503.  addq #1,d1
  504.  
  505.  dbra d7,plotscrnloop
  506.  
  507. smallnotlarge:
  508.  
  509. **********************************
  510.  
  511. ****************************
  512.  jsr INITPLAYER
  513. ; bsr initobjpos
  514. ****************************
  515.  
  516.  move.l #null,$dff0a0
  517.  move.w #100,$dff0a4
  518.  move.w #443,$dff0a6
  519.  move.w #63,$dff0a8
  520.  
  521.  move.l #null2,$dff0b0
  522.  move.w #100,$dff0b4
  523.  move.w #443,$dff0b6
  524.  move.w #63,$dff0b8
  525.  
  526.  move.l #null4,$dff0c0
  527.  move.w #100,$dff0c4
  528.  move.w #443,$dff0c6
  529.  move.w #63,$dff0c8
  530.  
  531.  move.l #null3,$dff0d0
  532.  move.w #100,$dff0d4
  533.  move.w #443,$dff0d6
  534.  move.w #63,$dff0d8
  535.  
  536.  move.l #tab,a1
  537.  move.w #64,d7
  538.  move.w #0,d6
  539. outerlop
  540.  move.l #pretab,a0
  541.  move.w #255,d5
  542. scaledownlop:
  543.  move.b (a0)+,d0
  544.  ext.w d0
  545.  ext.l d0
  546.  muls d6,d0
  547.  asr.l #6,d0
  548.  move.b d0,(a1)+
  549.  dbra d5,scaledownlop
  550.  addq #1,d6
  551.  dbra d7,outerlop
  552.  
  553.  move.l #$dff000,a6
  554.  
  555.  move.w #$c018,intena(a6)
  556.  
  557.  move.w #$f,dmacon(a6)
  558.  move.w #$820f,dmacon(a6)
  559.  
  560.  bsr FullEnergy
  561.  move.b #1,PLR1_GunDamage
  562.  move.b #1,PLR2_GunDamage
  563.  move.w #3,PLR1_GunNoise
  564.  move.w #3,PLR2_GunNoise
  565.  
  566. ; move.w #$20,$1dc(a6)
  567.  
  568.  move.l #RecordBuffer+6,RecordPtr
  569.  move.w #0,FrameNum
  570.  
  571.  move.w #$0,$dff034
  572.  
  573. lop: 
  574.  
  575.  move.l #$dff000,a6
  576.  
  577.  move.l drawpt,d0
  578.  move.l olddrawpt,drawpt
  579.  move.l d0,olddrawpt
  580.  move.l d0,$dff084
  581.  move.l drawpt,a3
  582.  adda.w #10,a3
  583.  move.l a3,frompt
  584.  add.l #104*4*40,a3
  585.  move.l a3,midpt
  586.  
  587.  move.w FrameNum,d0
  588.  move.l #SPEEDTABLE,a0
  589.  move.w FramesToDraw,(a0,d0.w*2)
  590.  
  591. waitfortop:
  592.  btst.b #0,intreqrl(a6)
  593.  beq waitfortop
  594.  move.w #$1,intreq(a6)
  595.  
  596.  move.l waterpt,a0
  597.  move.l (a0)+,watertouse
  598.  cmp.l #endwaterlist,a0
  599.  blt.s okwat
  600.  move.l #waterlist,a0
  601. okwat:
  602.  move.l a0,waterpt
  603.  
  604.  add.w #640,wtan
  605.  and.w #8191,wtan
  606.  add.w #1,wateroff
  607.  and.w #63,wateroff
  608.  
  609.  move.w FramesToDraw,TempFrames
  610.  move.w #0,FramesToDraw
  611.  
  612.  JSR INITTIMER
  613.  
  614. ; bsr PLR1_Control
  615.  
  616.  
  617. ; bsr PLR2_Control 
  618.  
  619.  move.l RecordPtr,a0
  620.  move.w RecordBuffer+4,d5
  621.  move.l #KeyMap,a5
  622.  tst.b $4e(a5)
  623.  beq.s nostepforwards
  624.  adda.w d5,a0
  625.  addq #1,FrameNum
  626.  move.l a0,d0
  627.  sub.l #RecordBuffer,d0
  628.  cmp.l RecordBuffer,d0
  629.  blt.s notbacktostart 
  630.  suba.w d5,a0
  631.  subq.w #1,FrameNum
  632. notbacktostart:
  633.  
  634. nostepforwards:
  635.  
  636.  tst.b $4f(a5)
  637.  beq.s nostepbackwards
  638.  suba.w d5,a0
  639.  subq #1,FrameNum
  640.  bge.s .notbacktostart
  641.  adda.w d5,a0
  642.  move.w #0,FrameNum
  643. .notbacktostart:
  644.  
  645. nostepbackwards:
  646.  
  647.  move.l a0,RecordPtr
  648.  move.w (a0)+,PLR1_xoff
  649.  move.w (a0)+,d0
  650.  ext.l d0
  651.  asl.l #7,d0
  652.  move.l d0,PLR1_yoff
  653.  move.w (a0)+,PLR1_zoff
  654.  moveq #0,d0
  655.  move.b (a0)+,d0
  656.  move.l #ZoneAdds,a1
  657.  move.l (a1,d0.w*4),a1
  658.  move.l a1,PLR1_Roompt
  659.  move.l 22(a1),PLR1_PointsToRotatePtr
  660.  add.l #26,a1
  661.  move.l a1,PLR1_ListOfGraphRooms
  662.  move.b (a0)+,d0
  663.  move.w (a0)+,PLR1_angpos
  664.  
  665.  move.l #PlayerShotData,a1
  666.  move.l #ObjectPoints,a2
  667.  move.w #4,d0
  668. PlayShots:
  669.  move.w (a1),d1
  670.  move.w (a0)+,(a2,d1*8)
  671.  move.w (a0)+,4(a2,d1*8)
  672.  move.w (a0)+,4(a1)
  673.  move.w (a0)+,12(a1)
  674.  move.l (a0)+,8(a1)
  675.  move.w #-1,16(a1)
  676.  adda.w #32,a1
  677.  dbra d0,PlayShots
  678.  
  679.  move.l #liftheighttab,a1
  680. playlifts:
  681.  move.w (a0)+,d0
  682.  cmp.w #999,d0
  683.  beq.s outoflifts
  684.  move.w d0,(a1)+
  685.  bra.s playlifts
  686. outoflifts:
  687.  
  688.  move.l #doorheighttab,a1
  689. playdoors:
  690.  move.w (a0)+,d0
  691.  cmp.w #999,d0
  692.  beq.s outofdoors
  693.  move.w d0,(a1)+
  694.  bra.s playdoors
  695. outofdoors:
  696.  
  697.  move.l #ObjectPoints,a2
  698.  move.l #ObjectData,a1
  699. playalien:
  700.  cmp.l #PlayerShotData,a1
  701.  bge.s doneallaliens
  702.  move.w (a1),d0
  703.  move.w (a0)+,(a2,d0.w*8)
  704.  move.w (a0)+,4(a2,d0.w*8)
  705.  move.w (a0)+,4(a1)
  706.  move.w (a0)+,12(a1)
  707.  move.l (a0)+,8(a1)
  708.  move.w #-1,16(a1)
  709.  adda.w #32,a1
  710.  bra.s playalien
  711. doneallaliens:
  712.  
  713.  move.w #0,chanpick
  714.  moveq #0,d0
  715.  move.b (a0),d0
  716.  blt.s nono0
  717.  move.w d0,Samplenum
  718.  move.b 1(a0),d3
  719.  move.b 2(a0),d4
  720.  jsr Recordednoise
  721. nono0:
  722.  addq #3,a0
  723.  
  724.  move.w #1,chanpick
  725.  moveq #0,d0
  726.  move.b (a0),d0
  727.  blt.s nono1
  728.  move.w d0,Samplenum
  729.  move.b 1(a0),d3
  730.  move.b 2(a0),d4
  731.  jsr Recordednoise
  732. nono1:
  733.  addq #3,a0
  734.  move.w #2,chanpick
  735.  moveq #0,d0
  736.  move.b (a0),d0
  737.  blt.s nono2
  738.  move.w d0,Samplenum
  739.  move.b 1(a0),d3
  740.  move.b 2(a0),d4
  741.  jsr Recordednoise
  742. nono2:
  743.  addq #3,a0
  744.  move.w #3,chanpick
  745.  moveq #0,d0
  746.  move.b (a0),d0
  747.  blt.s nono3
  748.  move.w d0,Samplenum
  749.  move.b 1(a0),d3
  750.  move.b 2(a0),d4
  751.  jsr Recordednoise
  752. nono3:
  753.  addq #3,a0
  754.  
  755. ; move.l a0,RecordPtr
  756.  
  757.  
  758. ******************************************
  759.  jsr objmoveanim
  760.  bsr PlaceFace
  761.  bsr EnergyBar
  762.  clr.b PLR1_clicked
  763.  clr.b PLR2_clicked
  764. ******************************************
  765.  
  766.  move.l #ObjectPoints,a1
  767.  move.l #PLR1_Obj,a0
  768.  move.b damagetaken(a0),d2
  769.  beq notbeenshot
  770.  ext.w d2
  771.  sub.w d2,Energy
  772.  move.b #0,damagetaken(a0)
  773.  move.l #Cheese,FacesPtr
  774.  move.w #3,Cheese
  775.  move.w #-1,FacesCounter
  776. notbeenshot:
  777.  move.b Energy+1,numlives(a0)
  778.  
  779.  move.w (a0),d0
  780.  move.l PLR1_xoff,(a1,d0.w*8)
  781.  move.l PLR1_zoff,4(a1,d0.w*8)
  782.  move.l PLR1_Roompt,a1
  783.  move.w (a1),12(a0)
  784.  move.l PLR1_yoff,d0
  785.  add.l #playerheight+128*24,d0
  786.  asr.l #7,d0
  787.  move.w d0,4(a0)
  788.  
  789.  move.l #ObjectPoints,a1
  790.  move.l #PLR2_Obj,a0
  791.  move.w (a0),d0
  792.  move.l PLR2_xoff,(a1,d0.w*8)
  793.  move.l PLR2_zoff,4(a1,d0.w*8)
  794.  move.l PLR2_Roompt,a1
  795. ************************
  796.  move.w (a1),12(a0)
  797.  move.w 10(a1),2(a0)
  798. ************************
  799.  move.l PLR2_yoff,d0
  800.  add.l #playerheight+128*24,d0
  801.  asr.l #7,d0
  802.  move.w d0,4(a0)
  803.  
  804.  
  805.  move.w #0,scaleval
  806.  
  807.  
  808. * Subroom loop
  809.  
  810.  move.l PLR1_xoff,xoff
  811.  move.l PLR1_yoff,yoff
  812.  move.l PLR1_zoff,zoff
  813.  move.w PLR1_angpos,angpos
  814.  move.l PLR1_ListOfGraphRooms,ListOfGraphRooms
  815.  move.l PLR1_PointsToRotatePtr,PointsToRotatePtr
  816.  move.l PLR1_Roompt,Roompt
  817.  
  818.  move.w #0,leftclip
  819.  move.w #96,rightclip
  820.  move.w #0,deftopclip
  821.  move.w #79,defbotclip
  822. ; sub.l #10*104*4,frompt
  823. ; sub.l #10*104*4,midpt
  824.  
  825.  bsr DrawDisplay
  826.  
  827.  
  828.  tst.b PLR2
  829.  beq.s nodrawp2
  830.  
  831.  
  832.  move.l PLR2_xoff,xoff
  833.  move.l PLR2_yoff,yoff
  834.  move.l PLR2_zoff,zoff
  835.  move.w PLR2_angpos,angpos
  836.  move.l PLR2_ListOfGraphRooms,ListOfGraphRooms
  837.  move.l PLR2_PointsToRotatePtr,PointsToRotatePtr
  838.  
  839.  move.w #0,leftclip
  840.  move.w #96,rightclip
  841.  move.w #10,deftopclip
  842.  move.w #69,defbotclip
  843.  add.l #68*104*4,frompt
  844.  add.l #68*104*4,midpt
  845.  
  846.  bsr DrawDisplay
  847.  
  848.  
  849. nodrawp2:
  850.  
  851. ; move.l #brightentab,a0
  852. ; move.l frompt,a3
  853. ; adda.w #(4*33)+(104*4*20),a3
  854. ; move.w #20,d7
  855. ; move.w #20,d6
  856. ;horl:
  857. ; move.w d6,d5
  858. ; move.l a3,a1
  859. ;vertl
  860. ; move.w (a1),d0
  861. ; move.w (a0,d0.w*2),(a1)
  862. ; addq #4,a1
  863. ; dbra d5,vertl
  864. ; adda.w #104*4,a3
  865. ; dbra d7,horl
  866.  
  867.  move.l #$dff000,a6
  868.  
  869. ; move.w #$300,col0(a6)
  870.  
  871.  
  872.  btst #7,$bfe001
  873.  bne.s noend
  874. waitrel
  875.  btst #6,$bfe001
  876.  beq.s waitrel
  877.  bra end
  878. noend:
  879.  
  880.  tst.w Energy
  881.  ble end
  882.  
  883.  JSR STOPTIMER
  884.  
  885.  bra lop
  886.  
  887. FrameNum: dc.w 0
  888.  
  889. ***************************************************************************
  890. ***************************************************************************
  891. ****************** End of Main Loop here ********************************** 
  892. ***************************************************************************
  893. ***************************************************************************
  894.  
  895. Path: incbin "testpath"
  896. endpath:
  897. pathpt: dc.l Path
  898.  
  899. PLR1KEYS: dc.b 0
  900. PLR1PATH: dc.b 0
  901. PLR1MOUSE: dc.b -1
  902.  
  903.  even
  904.  
  905.  
  906. PLR1_Control:
  907.  
  908. ; Take a snapshot of everything.
  909.  
  910.  move.l PLR1_xoff,d2
  911.  move.l d2,PLR1_oldxoff
  912.  move.l d2,oldx
  913.  move.l PLR1_zoff,d3
  914.  move.l d3,PLR1_oldzoff
  915.  move.l d3,oldz
  916.  move.l PLR1s_xoff,d0
  917.  move.l d0,PLR1_xoff
  918.  move.l d0,newx
  919.  move.l PLR1s_zoff,d1
  920.  move.l d1,newz
  921.  move.l d1,PLR1_zoff
  922.  sub.l d2,d0
  923.  sub.l d3,d1
  924.  move.l d0,xdiff
  925.  move.l d1,zdiff
  926.  move.w PLR1s_sinval,PLR1_sinval
  927.  move.w PLR1s_cosval,PLR1_cosval
  928.  move.w PLR1s_angpos,PLR1_angpos
  929.  move.l PLR1s_yoff,d0
  930.  move.l d0,PLR1_yoff
  931.  move.l d0,newy
  932.  move.l #playerheight,thingheight
  933.  move.l #40*256,StepUpVal
  934.  
  935.  move.l PLR1_Roompt,objroom
  936.  move.w #%100000000,wallflags
  937.  
  938.  bsr MoveObject
  939.  move.w #0,wallflags
  940.  move.l objroom,PLR1_Roompt
  941.  move.w newx,PLR1_xoff
  942.  move.w newz,PLR1_zoff
  943.  move.l PLR1_xoff,PLR1s_xoff
  944.  move.l PLR1_zoff,PLR1s_zoff
  945.  
  946.  move.l PLR1_Roompt,a0
  947.  move.l 2(a0),d0
  948.  adda.w #22,a0
  949.  sub.l #playerheight,d0
  950.  move.l d0,PLR1s_tyoff
  951.  
  952. ; move.l (a0),a0        ; jump to viewpoint list
  953.  * A0 is pointing at a pointer to list of points to rotate
  954.  move.l (a0)+,PLR1_PointsToRotatePtr
  955.  move.l a0,PLR1_ListOfGraphRooms
  956.  
  957. *****************************************************
  958.  
  959.  rts
  960.  
  961. KeyMap: ds.b 256
  962.  
  963. PLR2_Control:
  964.  move.l #SineTable,a0
  965.  
  966.  bsr turnleftright
  967.  
  968.  move.w PLR2_angspd,d1
  969.  move.w PLR2_angpos,d0
  970.  move.w (a0,d0.w),PLR2_sinval
  971.  adda.w #2048,a0
  972.  move.w (a0,d0.w),PLR2_cosval
  973.  
  974.  move.l PLR2_xspdval,d6
  975.  move.l PLR2_zspdval,d7
  976.  
  977.  move.w PLR2_xoff,oldxoff
  978.  move.w PLR2_zoff,oldzoff
  979.  
  980.  neg.l d6
  981.  ble.s .nobug1
  982.  asr.l #1,d6
  983.  add.l #1,d6
  984.  bra.s .bug1
  985. .nobug1
  986.  asr.l #1,d6
  987. .bug1:
  988.  
  989. ; beq.s goinnowhere
  990. ; blt.s goinfor
  991. ; cmp.l #4*65536,d6
  992. ; ble.s goinnowhere
  993. ; move.l #4*65536,d6
  994. ;goinfor:
  995. ; cmp.l #-4*65536,d6
  996. ; bge.s goinnowhere
  997. ; move.l #-4*65536,d6
  998. ;goinnowhere:
  999.  
  1000.  neg.l d7
  1001.  ble.s .nobug2
  1002.  asr.l #1,d7
  1003.  add.l #1,d7
  1004.  bra.s .bug2
  1005. .nobug2
  1006.  asr.l #1,d7
  1007. .bug2: 
  1008.  
  1009. ; beq.s goinnowhere2
  1010. ; blt.s goinfor2
  1011. ; cmp.l #4*65536,d7
  1012. ; ble.s goinnowhere2
  1013. ; move.l #4*65536,d7
  1014. ;goinfor2:
  1015. ; cmp.l #-4*65536,d7
  1016. ; bge.s goinnowhere2
  1017. ; move.l #-4*65536,d7
  1018. ;goinnowhere2:
  1019.  
  1020.  move.w PLR2_sinval,d1
  1021.  move.w PLR2_cosval,d2
  1022.  move.w PLR2_ForwardSpd,d3
  1023.  
  1024.  muls d3,d2
  1025.  muls d3,d1
  1026.  
  1027.  sub.l d1,d6
  1028.  sub.l d2,d7
  1029.  add.l PLR2_pushx,d6
  1030.  add.l PLR2_pushz,d7 
  1031.  add.l d6,PLR2_xspdval
  1032.  add.l d7,PLR2_zspdval
  1033.  move.l PLR2_xspdval,d6
  1034.  move.l PLR2_zspdval,d7
  1035.  add.l d6,PLR2_xoff
  1036.  add.l d7,PLR2_zoff
  1037.  
  1038.  move.w PLR2_xoff,newx
  1039.  move.w PLR2_zoff,newz
  1040.  move.w oldxoff,oldx
  1041.  move.w oldzoff,oldz
  1042.  move.l PLR2_xspdval,xdiff
  1043.  move.l PLR2_zspdval,zdiff
  1044.  move.l PLR2_Roompt,objroom
  1045.  move.w #%100000000,wallflags
  1046.  bsr MoveObject
  1047.  move.w #0,wallflags
  1048.  move.l objroom,PLR2_Roompt
  1049.  move.w newx,PLR2_xoff
  1050.  move.w newz,PLR2_zoff
  1051.  
  1052.  move.l PLR2_xoff,d0
  1053.  move.l PLR2_zoff,d1
  1054.  sub.l oldxoff,d0
  1055.  sub.l oldzoff,d1
  1056.  move.l #0,PLR2_pushx
  1057.  move.l #0,PLR2_pushz
  1058.  move.l d0,PLR2_opushx
  1059.  move.l d1,PLR2_opushz
  1060.  
  1061.  move.l PLR2_Roompt,a0
  1062.  move.l 2(a0),d0
  1063.  sub.l #playerheight,d0
  1064.  move.l d0,PLR2_tyoff
  1065.  adda.w #22,a0
  1066.  
  1067. ; move.l (a0),a0        ; jump to viewpoint list
  1068.  * A0 is pointing at a pointer to list of points to rotate
  1069.  move.l (a0)+,PLR2_PointsToRotatePtr
  1070.  move.l a0,PLR2_ListOfGraphRooms
  1071.  
  1072. *****************************************************
  1073.  
  1074.  move.l PLR2_tyoff,d0
  1075.  move.l PLR2_yoff,d1
  1076.  move.l PLR2_yvel,d2
  1077.  add.l d2,d1
  1078.  add.l #1024,d2
  1079.  sub.l d1,d0
  1080.  bgt.s .shouldfall
  1081.  move.l #0,d2
  1082.  add.l d0,d1
  1083. .shouldfall:
  1084.  move.l d2,PLR2_yvel
  1085.  move.l d1,PLR2_yoff
  1086.  rts
  1087.  
  1088.  
  1089. DrawDisplay:
  1090.  
  1091.  
  1092.  move.l #SineTable,a0
  1093.  move.w angpos,d0
  1094.  move.w (a0,d0.w),d6
  1095.  adda.w #2048,a0
  1096.  move.w (a0,d0.w),d7
  1097.  move.w d6,sinval
  1098.  move.w d7,cosval
  1099.  
  1100.  move.l yoff,d0
  1101.  asr.l #8,d0
  1102.  move.w d0,d1
  1103.  and.w #63,d1
  1104.  move.w d1,wallyoff
  1105.  asl.w #2,d0
  1106.  move.w d0,flooryoff
  1107.  
  1108.  move.w xoff,d6
  1109.  move.w d6,d3
  1110.  asr.w #1,d3
  1111.  add.w d3,d6
  1112.  asr.w #1,d6
  1113.  move.w d6,xoff34
  1114.  
  1115.  move.w zoff,d6
  1116.  move.w d6,d3
  1117.  asr.w #1,d3
  1118.  add.w d3,d6
  1119.  asr.w #1,d6
  1120.  move.w d6,zoff34
  1121.  
  1122.  bsr RotateLevelPts
  1123.  bsr RotateObjectPts
  1124.  bsr OrderZones
  1125.  
  1126.  move.l ListOfGraphRooms,a0
  1127.  cmp.l #BackGraph,(a0)
  1128.  bne.s noback
  1129.  
  1130.  jsr putinbackdrop
  1131. noback:
  1132.  
  1133.  move.l endoflist,a0
  1134. subroomloop:
  1135.  move.w -(a0),d7
  1136.  blt jumpoutofrooms
  1137.  
  1138. ; bsr setlrclip
  1139. ; move.w leftclip,d0
  1140. ; cmp.w rightclip,d0
  1141. ; bge subroomloop
  1142.  move.l a0,-(a7)
  1143.  move.l #ZoneGraphAdds,a0
  1144.  move.l (a0,d7.w*4),a0
  1145.  move.l a0,ThisRoomToDraw
  1146.  
  1147.  move.l ListOfGraphRooms,a1
  1148.  
  1149. finditit:
  1150.  tst.l (a1)
  1151.  blt nomoretodoatall
  1152.  cmp.l (a1),a0
  1153.  beq outoffind
  1154.  adda.w #12,a1
  1155.  bra finditit
  1156.  
  1157. outoffind:
  1158.  
  1159.  move.l a1,-(a7)
  1160.  
  1161.  move.l 4(a1),a0
  1162.      
  1163.  move.w #0,leftclip
  1164.  move.w #96,rightclip
  1165.  tst.l (a0)
  1166.  beq outofcliplop
  1167.  
  1168.  bsr NEWsetlrclip
  1169.  
  1170. intocliplop:        ; clips
  1171.  tst.l (a0)
  1172.  beq outofcliplop
  1173.  
  1174.  bsr NEWsetlrclip 
  1175.  bra intocliplop
  1176.  
  1177. outofcliplop:
  1178.  
  1179.  
  1180.  move.l ThisRoomToDraw,a0
  1181.  move.w leftclip,d0
  1182.  cmp.w #95,d0
  1183.  bge dontbothercantseeit
  1184.  move.w rightclip,d1
  1185.  blt dontbothercantseeit
  1186.  cmp.w d1,d0
  1187.  bge dontbothercantseeit
  1188.  
  1189.  bsr dothisroom
  1190.  
  1191. dontbothercantseeit:
  1192. pastemp:
  1193.  
  1194.  move.l (a7)+,a1
  1195.  move.l ThisRoomToDraw,a0
  1196.  adda.w #12,a1
  1197.  bra finditit
  1198.  
  1199. nomoretodoatall:
  1200.  
  1201.  move.l (a7)+,a0
  1202.  
  1203.  bra subroomloop
  1204.  
  1205. jumpoutofrooms:
  1206.  
  1207.  
  1208.  rts
  1209.  
  1210. TempBuffer: ds.l 100 
  1211.  
  1212. ClipTable: ds.l 30
  1213. EndOfClipPt: dc.l 0
  1214.  
  1215. dothisroom
  1216.  
  1217.  move.w (a0)+,d0
  1218.  move.w d0,currzone
  1219.  move.l #ZoneAdds,a1
  1220.  move.l (a1,d0.w*4),a1
  1221.  move.w 10(a1),ZoneBright
  1222.  
  1223. polyloop:
  1224.  move.w (a0)+,d0
  1225.  blt jumpoutofloop
  1226.  beq itsawall
  1227.  cmp.w #3,d0
  1228.  beq itsasetclip
  1229.  blt itsafloor
  1230.  cmp.w #4,d0
  1231.  beq itsanobject
  1232.  cmp.w #5,d0
  1233.  beq.s itsanarc
  1234.  cmp.w #6,d0
  1235.  beq itsalightbeam
  1236.  cmp.w #7,d0
  1237.  beq.s itswater
  1238.  cmp.w #9,d0
  1239.  ble itsachunkyfloor
  1240.  cmp.w #11,d0
  1241.  ble.s itsabumpyfloor
  1242.  cmp.w #12,d0
  1243.  beq.s itsbackdrop
  1244.  cmp.w #13,d0
  1245.  beq.s itsaseewall
  1246.  
  1247.  bra polyloop
  1248.  
  1249. itsaseewall:
  1250.  st seethru
  1251.  move.l #stripbufferthru,a1
  1252.  jsr itsawalldraw
  1253.  bra polyloop
  1254.  
  1255. itsbackdrop:
  1256.  jsr putinbackdrop
  1257.  bra polyloop
  1258.  
  1259. itswater:
  1260.  move.w #1,d0
  1261.  move.l #FloorLine,LineToUse
  1262.  st usewater
  1263.  clr.b usebumps
  1264.  jsr itsafloordraw
  1265.  bra polyloop
  1266.  
  1267. itsanarc:
  1268.  jsr CurveDraw
  1269.  bra polyloop
  1270. itsanobject:
  1271.  jsr ObjDraw
  1272.  bra polyloop
  1273. itsalightbeam:
  1274.  jsr LightDraw
  1275.  bra polyloop
  1276.  
  1277. itsabumpyfloor:
  1278.  sub.w #9,d0
  1279.  st usebumps
  1280.  st smoothbumps
  1281.  clr.b usewater
  1282.  move.l #BumpLine,LineToUse
  1283.  jsr itsafloordraw
  1284.  bra polyloop
  1285.  
  1286. itsachunkyfloor:
  1287.  subq.w #7,d0
  1288.  st usebumps
  1289. ; sub.w #10,topclip
  1290. ; add.w #10,botclip
  1291.  clr.b smoothbumps
  1292.  clr.b usewater
  1293.  move.l #BumpLine,LineToUse
  1294.  jsr itsafloordraw
  1295. ; add.w #10,topclip
  1296. ; sub.w #10,botclip
  1297.  bra polyloop 
  1298.  
  1299. itsafloor:
  1300.  
  1301.  move.l #FloorLine,LineToUse
  1302. * 1,2 = floor/roof
  1303.  clr.b usewater
  1304.  clr.b usebumps
  1305.  JSR STARTCOUNT
  1306.  jsr itsafloordraw
  1307.  JSR STOPCOUNT
  1308.  bra polyloop
  1309. itsasetclip:
  1310.  bsr setlrclip
  1311.  bra polyloop
  1312. itsawall:
  1313.  clr.b seethru
  1314.  move.l #stripbuffer,a1
  1315.  jsr itsawalldraw
  1316.  bra polyloop
  1317.  
  1318. jumpoutofloop:
  1319.  rts
  1320.  
  1321.  
  1322. ThisRoomToDraw: dc.l 0
  1323.  
  1324.  include "ab3:source/OrderZones"
  1325.  
  1326. ReadMouse:
  1327.  clr.l d0
  1328.  clr.l d1
  1329.  move.w $a(a6),d0
  1330.  lsr.w #8,d0
  1331.  ext.l d0
  1332.  move.w d0,d3
  1333.  move.w oldy,d2
  1334.  sub.w d2,d0
  1335.  
  1336.  cmp.w #127,d0
  1337.  blt nonegy
  1338.  move.w #255,d1
  1339.  sub.w d0,d1
  1340.  move.w d1,d0
  1341.  neg.w d0
  1342. nonegy:
  1343.  
  1344.  cmp.w #-127,d0
  1345.  bge nonegy2
  1346.  move.w #255,d1
  1347.  add.w d0,d1
  1348.  move.w d1,d0
  1349. nonegy2:
  1350.  
  1351.  add.b d0,d2
  1352.  add.w d0,oldy2
  1353.  move.w d2,oldy
  1354.  move.w d2,d0
  1355.  
  1356.  move.w oldy2,d0
  1357.  move.w d0,ymouse
  1358.  
  1359.  clr.l d0
  1360.  clr.l d1
  1361.  move.w $a(a6),d0
  1362.  ext.w d0
  1363.  ext.l d0
  1364.  move.w d0,d3
  1365.  move.w oldmx,d2
  1366.  sub.w d2,d0
  1367.  
  1368.  cmp.w #127,d0
  1369.  blt nonegx
  1370.  move.w #255,d1
  1371.  sub.w d0,d1
  1372.  move.w d1,d0
  1373.  neg.w d0
  1374. nonegx:
  1375.  
  1376.  cmp.w #-127,d0
  1377.  bge nonegx2
  1378.  move.w #255,d1
  1379.  add.w d0,d1
  1380.  move.w d1,d0
  1381. nonegx2:
  1382.  
  1383.  add.b d0,d2
  1384.  move.w d0,d1
  1385.  move.w d2,oldmx
  1386.  
  1387.  
  1388.  move.w #$0,$dff034
  1389.  btst #2,$dff016
  1390.  beq.s noturn
  1391.  
  1392.  add.w d0,oldx2
  1393.  move.w oldx2,d0
  1394.  and.w #2047,d0
  1395.  move.w d0,oldx2
  1396.  
  1397.  asl.w #2,d0
  1398.  sub.w prevx,d0
  1399.  add.w d0,prevx
  1400.  add.w d0,PLR1s_angpos
  1401.  move.w #0,lrs
  1402.  rts
  1403.  
  1404. noturn:
  1405.  
  1406. ; got to move lr instead. 
  1407.  
  1408. ; d1 = speed moved l/r
  1409.  
  1410.  move.w d1,lrs
  1411.  
  1412.  rts
  1413.  
  1414. lrs: dc.w 0
  1415. prevx: dc.w 0
  1416.  
  1417. mang: dc.w 0
  1418. oldymouse: dc.w 0
  1419. xmouse: dc.w 0
  1420. ymouse: dc.w 0
  1421. oldx2: dc.w 0
  1422. oldmx: dc.w 0
  1423. oldy: dc.w 0
  1424. oldy2: dc.w 0
  1425.  
  1426. RotateLevelPts:
  1427.  
  1428.  move.w sinval,d6
  1429.  swap d6
  1430.  move.w cosval,d6
  1431.  
  1432.  move.l PointsToRotatePtr,a0
  1433.  move.l #Points,a3
  1434.  move.l #Rotated,a1
  1435.  move.l #OnScreen,a2
  1436.  move.w xoff,d4
  1437.  move.w zoff,d5
  1438.  
  1439. ; move.w #$c40,$dff106
  1440. ; move.w #$f00,$dff180
  1441.  
  1442. pointrotlop:
  1443.  move.w (a0)+,d7
  1444.  blt.s outofpointrot
  1445.  
  1446.  move.w (a3,d7*4),d0
  1447.  sub.w d4,d0
  1448.  move.w d0,d2
  1449.  move.w 2(a3,d7*4),d1
  1450.  sub.w d5,d1
  1451.  muls d6,d2
  1452.  swap d6
  1453.  move.w d1,d3
  1454.  muls d6,d3
  1455.  sub.l d3,d2
  1456.  add.l d2,d2
  1457.  swap d2
  1458.  ext.l d2
  1459.  asl.l #7,d2
  1460.  move.l d2,(a1,d7*8)
  1461.  
  1462.  muls d6,d0
  1463.  swap d6
  1464.  muls d6,d1
  1465.  add.l d0,d1
  1466.  asl.l #2,d1
  1467.  swap d1
  1468.  move.l d1,4(a1,d7*8)
  1469.  
  1470.  tst.w d1
  1471.  bgt.s ptnotbehind
  1472.  move.w #-1,d2
  1473.  bra putin
  1474. ptnotbehind:
  1475.  
  1476.  divs d1,d2
  1477.  add.w #47,d2
  1478. putin:
  1479.  move.w d2,(a2,d7*2)
  1480.  
  1481.  bra pointrotlop
  1482. outofpointrot:
  1483.  
  1484. ; move.w #$c40,$dff106
  1485. ; move.w #$ff0,$dff180
  1486.  
  1487.  rts
  1488.  
  1489. RotateObjectPts:
  1490.  
  1491.  move.w sinval,d5
  1492.  move.w cosval,d6
  1493.  
  1494.  move.l #ObjectPoints,a0
  1495.  move.w NumObjectPoints,d7
  1496.  move.l #ObjRotated,a1
  1497.  move.l #ObsInLine,a2
  1498. objpointrotlop:
  1499.  
  1500.  move.w (a0),d0
  1501.  sub.w xoff,d0
  1502.  move.w 4(a0),d1
  1503.  addq #8,a0
  1504.  sub.w zoff,d1
  1505.  move.w d0,d2
  1506.  muls d6,d2
  1507.  move.w d1,d3
  1508.  muls d5,d3
  1509.  sub.l d3,d2
  1510.  add.l d2,d2
  1511.  swap d2
  1512.  move.w d2,(a1)+
  1513.  
  1514.  muls d5,d0
  1515.  muls d6,d1
  1516.  add.l d0,d1
  1517.  asl.l #2,d1
  1518.  swap d1
  1519.  moveq #0,d3
  1520.  
  1521.  tst.w d1
  1522.  ble.s notinline
  1523.  
  1524.  cmp.w #-60,d2
  1525.  blt.s notinline
  1526.  cmp.w #60,d2
  1527.  sle d3
  1528. notinline
  1529.  move.b d3,(a2)+
  1530.  
  1531.  move.w d1,(a1)+
  1532.  ext.l d2
  1533.  asl.l #7,d2
  1534.  move.l d2,(a1)+
  1535.  
  1536.  dbra d7,objpointrotlop
  1537.  
  1538.  rts
  1539.  
  1540. LightDraw:
  1541.  
  1542.  move.w (a0)+,d0
  1543.  move.w (a0)+,d1
  1544.  move.l #Rotated,a1
  1545.  move.w 6(a1,d0.w*8),d2
  1546.  ble.s oneendbehind
  1547.  move.w 6(a1,d1.w*8),d3
  1548.  bgt.s bothendsinfront
  1549.  
  1550. oneendbehind:
  1551.  rts
  1552. bothendsinfront:
  1553.  
  1554.  move.l #OnScreen,a2
  1555.  move.w (a2,d0.w*2),d0
  1556.  bge.s okleftend
  1557.  moveq #0,d0
  1558. okleftend:
  1559.  move.w (a2,d1.w*2),d1
  1560.  bgt.s somevis
  1561.  rts
  1562. somevis:
  1563.  cmp.w #95,d0
  1564.  ble.s somevis2
  1565.  rts
  1566. somevis2:
  1567.  cmp.w #95,d1
  1568.  ble.s okrightend
  1569.  move.w #95,d1
  1570. okrightend:
  1571.  
  1572.  sub.w d0,d1
  1573.  blt.s wrongbloodywayround
  1574.  move.l #brightentab,a4
  1575.  move.l #objintocop,a1
  1576.  lea (a1,d0.w*2),a1
  1577.  
  1578.  move.l frompt,a3
  1579.  move.w #104*4,d6
  1580.  move.w #79,d2
  1581. lacross:
  1582.  move.w d2,d3
  1583.  move.l a3,a2
  1584.  adda.w (a1)+,a2
  1585. ldown:
  1586.  add.w d6,a2
  1587.  move.w (a2),d7
  1588.  move.w (a4,d7.w*2),(a2)
  1589.  dbra d3,ldown
  1590.  dbra d1,lacross
  1591.  
  1592. wrongbloodywayround:
  1593.  
  1594.  rts
  1595.  
  1596. FaceToPlace: dc.w 0
  1597.  
  1598. Cheese:
  1599.  dc.w 4,15
  1600.  
  1601. FacesList:
  1602.  dc.w 0,4*4
  1603.  dc.w 1,2*4
  1604.  dc.w 0,2*4
  1605.  dc.w 2,2*4
  1606.  dc.w 0,2*4
  1607.  dc.w 1,3*4
  1608.  dc.w 0,2*4
  1609.  dc.w 2,3*4
  1610.  dc.w 0,5*4
  1611.  dc.w 1,2*4
  1612.  dc.w 0,2*4
  1613.  dc.w 2,2*4
  1614.  dc.w 0,2*4
  1615.  dc.w 1,2*4
  1616.  dc.w 0,2*4
  1617.  dc.w 2,3*4
  1618.  dc.w 0,1*4
  1619.  dc.w 1,3*4
  1620.  dc.w 0,1*4
  1621.  dc.w 2,3*4
  1622.  dc.w 0,1*4
  1623.  
  1624. EndOfFacesList:
  1625.  
  1626. FacesPtr:
  1627.  dc.l FacesList
  1628. FacesCounter:
  1629.  dc.w 0
  1630. Expression:
  1631.  dc.w 0
  1632.  
  1633. PlaceFace:
  1634.  
  1635.  move.w FacesCounter,d0
  1636.  subq #1,d0
  1637.  bgt.s NoNewFace
  1638.  
  1639.  move.l FacesPtr,a0
  1640.  
  1641.  move.w 2(a0),d0
  1642.  move.w (a0),Expression
  1643.  addq #4,a0
  1644.  cmp.l #EndOfFacesList,a0
  1645.  blt.s NotFirstFace
  1646.  
  1647.  move.l #FacesList,a0
  1648.  
  1649. NotFirstFace
  1650.  move.l a0,FacesPtr
  1651.  
  1652. NoNewFace:
  1653.  
  1654.  move.w d0,FacesCounter
  1655.  
  1656.  Move.w FaceToPlace,d0
  1657.  muls #5,d0
  1658.  add.w Expression,d0
  1659.  move.l #FacePlace+10,a0
  1660.  move.l #Faces,a1
  1661.  muls #(4*32*5),d0
  1662.  adda.w d0,a1
  1663.  move.w #4,d0
  1664.  move.w #24,d1
  1665.  
  1666.  move.w #4,d3
  1667. bitplaneloop:
  1668.  move.w #31,d2
  1669. PlaceFaceToPlaceInFacePlaceLoop:
  1670.  move.l (a1),(a0)
  1671.  adda.w d0,a1
  1672.  adda.w d1,a0
  1673.  dbra d2,PlaceFaceToPlaceInFacePlaceLoop
  1674.  dbra d3,bitplaneloop
  1675.  
  1676.  rts
  1677.  
  1678. Energy:
  1679.  dc.w 191
  1680. OldEnergy:
  1681.  dc.w 191
  1682.  
  1683. FullEnergy:
  1684.  move.w #191,Energy
  1685.  move.w #191,OldEnergy
  1686.  move.l #Panel+41*24,a0
  1687.  move.w #6*6-1,d0
  1688. fillbar:
  1689.  move.l #$fefefefe,(a0)+
  1690.  dbra d0,fillbar
  1691.  rts
  1692.  
  1693. EnergyBar:
  1694.  
  1695.  move.w Energy,d0
  1696.  move.w #192,d1
  1697.  sub.w d0,d1
  1698.  ext.l d1
  1699.  divs #39,d1
  1700.  move.w d1,FaceToPlace
  1701.  cmp.w OldEnergy,d0
  1702.  bne.s gottochange
  1703.  
  1704. NoChange
  1705.  rts
  1706.  
  1707. gottochange:
  1708.   
  1709.  blt LessEnergy
  1710.  cmp.w #191,Energy
  1711.  blt.s NotMax
  1712.  move.w #191,Energy
  1713. NotMax:
  1714.  
  1715.  move.w Energy,d0
  1716.  move.w OldEnergy,d2
  1717.  sub.w d0,d2
  1718.  beq.s NoChange
  1719.  neg.w d2
  1720.  
  1721.  move.w OldEnergy,d3
  1722.  
  1723.  move.l #Panel+41*24,a0
  1724. EnergyRise:
  1725.  move.w d3,d0
  1726.  move.b d0,d1
  1727.  not.b d1
  1728.  and.b #7,d1
  1729.  beq.s noplot
  1730.  asr.w #3,d0
  1731.  lea (a0,d0.w),a1
  1732.  bset.b d1,(a1)
  1733.  bset.b d1,24(a1)
  1734.  bset.b d1,24*2(a1)
  1735.  bset.b d1,24*3(a1)
  1736.  bset.b d1,24*4(a1)
  1737.  bset.b d1,24*5(a1)
  1738. noplot:
  1739.  addq #1,d3
  1740.  subq #1,d2
  1741.  bgt.s EnergyRise
  1742.  
  1743.  move.w Energy,OldEnergy
  1744.  
  1745.  rts 
  1746.  
  1747.  
  1748. LessEnergy: 
  1749.  move.w OldEnergy,d2
  1750.  sub.w d0,d2
  1751.  
  1752.  move.w OldEnergy,d3
  1753.  
  1754.  move.l #Panel+41*24,a0
  1755. EnergyDrain:
  1756.  move.w d3,d0
  1757.  move.b d0,d1
  1758.  not.b d1
  1759.  asr.w #3,d0
  1760.  lea (a0,d0.w),a1
  1761.  bclr.b d1,(a1)
  1762.  bclr.b d1,24(a1)
  1763.  bclr.b d1,24*2(a1)
  1764.  bclr.b d1,24*3(a1)
  1765.  bclr.b d1,24*4(a1)
  1766.  bclr.b d1,24*5(a1)
  1767.  subq #1,d3
  1768.  subq #1,d2
  1769.  bgt.s EnergyDrain
  1770.  
  1771.  move.w Energy,OldEnergy
  1772.  
  1773.  rts 
  1774.  
  1775. end:
  1776.  jmp closeeverything 
  1777.  
  1778. do32:
  1779.  move.w #31,d7
  1780.  move.w #$180,d1
  1781. across:
  1782.  move.w d1,(a1)+
  1783.  move.w d1,(a3)+
  1784.  move.w #0,(a1)+
  1785.  move.w #0,(a3)+
  1786.  add.w #2,d1
  1787.  dbra d7,across
  1788.  rts
  1789.  
  1790.  
  1791.  
  1792. *************************************
  1793. * Set left and right clip values
  1794. *************************************
  1795.  
  1796.  
  1797. setlrclip:
  1798.  move.l #OnScreen,a1
  1799.  move.l #Rotated,a2
  1800.  
  1801.  move.w (a0)+,d0
  1802.  bge.s notdefaultleft
  1803.  move.w #0,leftclip
  1804.  move.w #0,d3
  1805.  bra leftnotoktoclip
  1806. notdefaultleft:
  1807.  
  1808.  move.w 6(a2,d0*8),d3    ; left z val
  1809.  bgt.s leftclipinfront
  1810.  
  1811.  move.w (a0),d0
  1812.  tst.w 6(a2,d0*8)
  1813.  bgt.s leftnotoktoclip
  1814.  move.w #95,leftclip
  1815.  move.w #0,rightclip
  1816.  addq #4,a0
  1817.  rts
  1818.  
  1819. leftclipinfront:
  1820.  move.w (a1,d0*2),d1    ; left x on screen
  1821.  cmp.w leftclip(pc),d1
  1822.  ble.s leftnotoktoclip
  1823.  cmp.w #95,d1
  1824.  ble.s leftclipnotoffright
  1825.  move.w #95,d1
  1826. leftclipnotoffright:
  1827.  move.w d1,leftclip
  1828. leftnotoktoclip:
  1829.  
  1830.  move.w (a0)+,d0
  1831.  bge.s notdefaultright
  1832.  move.w #96,rightclip
  1833.  move.w #0,d4
  1834.  bra rightnotoktoclip
  1835. notdefaultright:
  1836.  move.w 6(a2,d0*8),d4    ; right z val
  1837.  ble.s rightnotoktoclip
  1838.  
  1839. rightclipinfront:
  1840.  move.w (a1,d0*2),d1    ; right x on screen
  1841.  cmp.w rightclip(pc),d1
  1842.  bge.s rightnotoktoclip
  1843.  tst.w d1
  1844.  bge.s rightclipnotoffleft
  1845.  moveq #0,d1
  1846. rightclipnotoffleft:
  1847.  addq #1,d1
  1848.  move.w d1,rightclip
  1849. rightnotoktoclip:
  1850.  
  1851.  move.w (a0)+,d0
  1852.  bge.s nodefaulttopbot
  1853. defaulttopbot:
  1854.  move.w deftopclip,topclip
  1855.  move.w defbotclip,botclip
  1856.  rts
  1857. nodefaulttopbot:
  1858.  
  1859.  cmp.w d3,d4
  1860.  blt.s d4less
  1861.  exg d3,d4
  1862. d4less:
  1863.  tst.w d4
  1864.  ble.s defaulttopbot
  1865.  
  1866.  move.l #ZoneAdds,a2
  1867.  move.l (a2,d0.w*4),a2
  1868.  move.l 2(a2),d0    ; floor height
  1869.  move.l 6(a2),d1    ; roof height
  1870.  sub.l yoff,d0
  1871.  blt.s floordistant
  1872.  divs d4,d0
  1873.  bra.s donefloordiv
  1874. floordistant:
  1875.  divs d3,d0 
  1876. donefloordiv:
  1877.  
  1878.  sub.l yoff,d1
  1879.  blt.s roofnearest
  1880.  divs d3,d1
  1881.  bra doneroofdiv
  1882. roofnearest:
  1883.  divs d4,d1
  1884. doneroofdiv:
  1885.  
  1886.  add.w #40,d0
  1887.  add.w #40,d1
  1888.  cmp.w deftopclip(pc),d0
  1889.  bge.s botclipontop
  1890.  move.w deftopclip(pc),d0
  1891. botclipontop:
  1892.  cmp.w defbotclip(pc),d0
  1893.  ble.s botcliponbot
  1894.  move.w defbotclip(pc),d0
  1895. botcliponbot:
  1896.  cmp.w deftopclip(pc),d1
  1897.  bge.s topclipontop
  1898.  move.w deftopclip(pc),d1
  1899. topclipontop:
  1900.  cmp.w defbotclip(pc),d1
  1901.  ble.s topcliponbot
  1902.  move.w defbotclip(pc),d1
  1903. topcliponbot:
  1904.  move.w d0,botclip
  1905.  move.w d1,topclip
  1906.  
  1907.  rts
  1908.  
  1909. NEWsetlrclip:
  1910.  move.l #OnScreen,a1
  1911.  move.l #Rotated,a2
  1912.  
  1913.  move.w (a0)+,d0
  1914.  bge.s .notignoreleft
  1915.  
  1916. ; move.l #0,(a6)
  1917.  
  1918.  bra .leftnotoktoclip
  1919. .notignoreleft:
  1920.  
  1921.  move.w 6(a2,d0*8),d3    ; left z val
  1922.  bgt.s .leftclipinfront
  1923.  
  1924.  move.w (a0),d0
  1925.  blt.s .ignoreboth
  1926.  tst.w 6(a2,d0*8)
  1927.  bgt.s .leftnotoktoclip
  1928. .ignoreboth:
  1929. ; move.l #0,(a6)
  1930. ; move.l #96*65536,4(a6)
  1931.  move.w #0,leftclip
  1932.  move.w #96,rightclip
  1933.  addq #8,a6
  1934.  addq #2,a0
  1935.  rts
  1936.  
  1937. .leftclipinfront:
  1938.  move.w (a1,d0*2),d1    ; left x on screen
  1939. ; move.w d1,(a6)
  1940. ; move.w d3,2(a6)
  1941.  cmp.w leftclip(pc),d1
  1942.  ble.s .leftnotoktoclip
  1943.  move.w d1,leftclip
  1944. .leftnotoktoclip:
  1945.  
  1946.  move.w (a0)+,d0
  1947.  bge.s .notignoreright
  1948. ; move.w #96,4(a6)
  1949. ; move.w #0,6(a6)
  1950.  move.w #0,d4
  1951.  bra .rightnotoktoclip
  1952. .notignoreright:
  1953.  move.w 6(a2,d0*8),d4    ; right z val
  1954.  bgt.s .rightclipinfront
  1955. ; move.w #96,4(a6)
  1956. ; move.w #0,6(a6)
  1957.  bra.s .rightnotoktoclip
  1958.  
  1959. .rightclipinfront:
  1960.  move.w (a1,d0*2),d1    ; right x on screen
  1961. ; move.w d1,4(a6)
  1962. ; move.w d4,6(a6)
  1963.  
  1964.  cmp.w rightclip(pc),d1
  1965.  bge.s .rightnotoktoclip
  1966.  addq #1,d1
  1967.  move.w d1,rightclip
  1968. .rightnotoktoclip:
  1969.  addq #8,a6
  1970.  
  1971.  rts
  1972.  
  1973. FIRSTsetlrclip:
  1974.  move.l #OnScreen,a1
  1975.  move.l #Rotated,a2
  1976.  
  1977.  move.w (a0)+,d0
  1978.  bge.s .notignoreleft
  1979.  bra .leftnotoktoclip
  1980. .notignoreleft:
  1981.  
  1982.  move.w 6(a2,d0*8),d3    ; left z val
  1983.  bgt.s .leftclipinfront
  1984.  
  1985.  move.w (a0),d0
  1986.  blt.s .ignoreboth
  1987.  tst.w 6(a2,d0*8)
  1988.  bgt.s .leftnotoktoclip
  1989. .ignoreboth
  1990.  move.w #96,rightclip
  1991.  move.w #0,leftclip
  1992.  addq #2,a0
  1993.  rts
  1994.  
  1995. .leftclipinfront:
  1996.  move.w (a1,d0*2),d1    ; left x on screen
  1997.  cmp.w leftclip(pc),d1
  1998.  ble.s .leftnotoktoclip
  1999.  move.w d1,leftclip
  2000. .leftnotoktoclip:
  2001.  
  2002.  move.w (a0)+,d0
  2003.  bge.s .notignoreright
  2004.  move.w #0,d4
  2005.  bra .rightnotoktoclip
  2006. .notignoreright:
  2007.  move.w 6(a2,d0*8),d4    ; right z val
  2008.  ble.s .rightnotoktoclip
  2009.  
  2010. .rightclipinfront:
  2011.  move.w (a1,d0*2),d1    ; right x on screen
  2012.  cmp.w rightclip(pc),d1
  2013.  bge.s .rightnotoktoclip
  2014.  addq #1,d1
  2015.  move.w d1,rightclip
  2016. .rightnotoktoclip:
  2017.  
  2018. ; move.w leftclip,d0
  2019. ; move.w rightclip,d1
  2020. ; cmp.w d0,d1
  2021. ; bge.s .noswap
  2022. ; move.w #96,rightclip
  2023. ; move.w #0,leftclip
  2024. ;.noswap:
  2025.  
  2026.  rts
  2027.  
  2028.  
  2029. leftclip2: dc.w 0
  2030. rightclip2: dc.w 0
  2031. ZoneBright: dc.w 0
  2032.  
  2033. npolys: dc.w 0
  2034.  
  2035. PLR1_fire: dc.b 0
  2036. PLR2_fire: dc.b 0
  2037.  
  2038. turnleftright:
  2039.  
  2040.  move.w PLR2_angspd,d1
  2041.  move.w PLR2_angpos,d0
  2042.  
  2043.  move.w #120,d7
  2044.  muls TempFrames,d7
  2045.  
  2046.  move.w d1,d2
  2047.  neg.w d2
  2048.  cmp.w d7,d2
  2049.  ble.s okslow
  2050.  move.w d7,d2
  2051. okslow
  2052.  neg.w d7
  2053.  cmp.w d7,d2
  2054.  bge.s okslo
  2055.  move.w d7,d2
  2056. okslo:
  2057.  
  2058.  asr.w #1,d7
  2059.  
  2060.  btst #1,$d(a6)
  2061.  sne d3
  2062.  beq.s notleft
  2063.  move.w d7,d2
  2064.  neg.w d2
  2065. ; tst.w d1
  2066. ; bge.s notleft
  2067. ; moveq #0,d1
  2068. notleft
  2069.  
  2070.  btst #1,$c(a6)
  2071.  sne d4
  2072.  beq.s notright
  2073.  move.w d7,d2
  2074. ; tst.w d1
  2075. ; ble.s notright
  2076. ; moveq #0,d1
  2077. notright
  2078.  
  2079.  move.w #0,PLR2_ForwardSpd
  2080.  
  2081.  btst #0,$dff00c
  2082.  sne d5
  2083.  eor.b d4,d5
  2084.  beq.s notup
  2085.  move.w TempFrames,d7
  2086.  neg.w d7
  2087.  asl.w #2,d7
  2088.  move.w d7,PLR2_ForwardSpd
  2089. notup:
  2090.  
  2091.  btst #0,$dff00d
  2092.  sne d5
  2093.  eor.b d3,d5
  2094.  beq.s notdown
  2095.  move.w TempFrames,d7
  2096.  asl.w #2,d7
  2097.  move.w d7,PLR2_ForwardSpd
  2098. notdown:
  2099.  
  2100.  add.w d2,d1
  2101.  cmp.w #-360,d1
  2102.  bge.s okspdlft
  2103.  move.w #-360,d1
  2104. okspdlft:
  2105.  cmp.w #360,d1
  2106.  ble.s okspdrgt
  2107.  move.w #360,d1
  2108. okspdrgt:
  2109.  
  2110.  move.w d1,PLR2_angspd
  2111.  add.w d1,d0
  2112.  and.w #8191,d0
  2113.  move.w d0,PLR2_angpos
  2114.  rts
  2115.  
  2116. *****************************************************
  2117.  
  2118.  include "ab3:source/ObjectMove"
  2119.  
  2120. pastdata:
  2121. ***********************************
  2122. * This routine animates brightnesses.
  2123.  
  2124.  
  2125. liftpt: dc.l liftanimtab
  2126.  
  2127. brightpt:
  2128.  dc.l brightanimtab
  2129.  
  2130. liftanim:
  2131.  rts
  2132.  
  2133. ******************************
  2134.  include "ab3:source/Anims.demo"
  2135. ******************************
  2136.  
  2137. rotanimpt: dc.w 0
  2138. xradd: dc.w 5
  2139. yradd: dc.w 8
  2140. xrpos: dc.w 320
  2141. yrpos: dc.w 320
  2142.  
  2143. rotanim:
  2144.  rts
  2145.  
  2146. option:
  2147.  dc.l 0
  2148.  
  2149. ********** WALL STUFF *******************************
  2150.  
  2151.  include "AB3:source/wallroutine3.chipmem"
  2152.  
  2153. *****************************************************
  2154.  
  2155. ******************************************
  2156. * floor polygon
  2157.  
  2158. numsidestd: dc.w 0
  2159.  
  2160. NewCornerBuff:
  2161.  ds.l 100
  2162.  
  2163. itsafloordraw:
  2164.  
  2165. * If D0 =1 then its a floor otherwise (=2) it's
  2166. * a roof.
  2167.  
  2168.  move.w #0,above
  2169.  move.w (a0)+,d6    ; ypos of poly
  2170.  
  2171.  move.w leftclip(pc),d7
  2172.  cmp.w rightclip(pc),d7
  2173.  bge.s dontdrawreturn
  2174.  
  2175.  sub.w flooryoff,d6
  2176.  bgt.s below
  2177.  blt.s aboveplayer
  2178. dontdrawreturn:
  2179.  move.w (a0)+,d6    ; sides-1
  2180.  add.w d6,d6
  2181.  add.w d6,a0
  2182.  add.w #4+6,a0
  2183.  rts
  2184. aboveplayer:
  2185.  cmp.w #2,d0
  2186.  bne.s dontdrawreturn
  2187.  move.w #1,d0
  2188.  move.w d0,above
  2189.  neg.w d6
  2190. below:
  2191.  cmp.w #1,d0
  2192.  bne.s dontdrawreturn
  2193.  move.w d6,distaddr
  2194.  muls #64,d6
  2195.  move.l d6,ypos
  2196.  divs #40,d6        ; zpos of bottom
  2197.             ; visible line
  2198.  move.w d6,minz
  2199.  
  2200. ; Go round each point finding out
  2201. ; if it should be visible or not.
  2202.  
  2203.  move.l a0,-(a7)
  2204.  
  2205.  move.w (a0)+,d7    ; number of sides
  2206.  move.l #Rotated,a1
  2207.  move.l #OnScreen,a2
  2208.  move.l #NewCornerBuff,a3
  2209.  moveq #0,d4
  2210.  moveq #0,d5
  2211.  moveq #0,d6
  2212.  clr.b anyclipping
  2213.  
  2214. cornerprocessloop:
  2215.  
  2216.  move.w (a0)+,d0
  2217.  move.w 6(a1,d0.w*8),d1
  2218.  ble  .canttell
  2219.  
  2220.  move.w (a2,d0.w*2),d3
  2221.  cmp.w leftclip,d3
  2222.  bgt.s .nol
  2223.  st d4
  2224.  st anyclipping
  2225.  bra.s .nos
  2226. .nol:
  2227.  cmp.w rightclip,d3
  2228.  blt.s .nor
  2229.  st d6
  2230.  st anyclipping
  2231.  bra.s .nos
  2232. .nor:
  2233.  st d5
  2234. .nos:
  2235.  bra .cantell
  2236.  
  2237. .canttell:
  2238.  st d5
  2239.  st anyclipping
  2240.  
  2241. .cantell:
  2242.  
  2243.  
  2244.  dbra d7,cornerprocessloop
  2245.  
  2246.  move.l (a7)+,a0
  2247.  tst.b d5
  2248.  bne.s somefloortodraw
  2249.  eor.b d4,d6
  2250.  bne dontdrawreturn
  2251.  
  2252. somefloortodraw:
  2253.  
  2254.  move.w #80,top
  2255.  move.w #-1,bottom
  2256.  move.w #0,drawit
  2257.  move.l #Rotated,a1
  2258.  move.l #OnScreen,a2
  2259.  move.w (a0)+,d7    ; no of sides
  2260. sideloop:
  2261.  move.w minz,d6
  2262.  move.w (a0)+,d1
  2263.  move.w (a0),d3
  2264.  move.w 6(a1,d1*8),d4    ;first z
  2265.  cmp.w d6,d4
  2266.  bgt firstinfront
  2267.  move.w 6(a1,d3*8),d5    ; sec z
  2268.  cmp.w d6,d5
  2269.  ble bothbehind
  2270. ** line must be on left and partially behind.
  2271.  sub.w d5,d4
  2272.  move.l (a1,d1*8),d0
  2273.  sub.l (a1,d3*8),d0
  2274.  asr.l #7,d0
  2275.  sub.w d5,d6
  2276.  muls d6,d0    ; new x coord
  2277.  divs d4,d0
  2278.  ext.l d0
  2279.  asl.l #7,d0
  2280.  
  2281.  add.l (a1,d3*8),d0
  2282.  move.w minz,d4
  2283.  move.w (a2,d3*2),d2
  2284.  divs d4,d0
  2285.  add.w #47,d0
  2286.  move.l ypos,d3
  2287.  divs d5,d3
  2288.  move.w #40,d1 
  2289.  bra lineclipped
  2290.  
  2291. firstinfront:
  2292.  move.w 6(a1,d3*8),d5    ; sec z
  2293.  cmp.w d6,d5
  2294.  bgt bothinfront
  2295. ** line must be on right and partially behind.
  2296.  sub.w d4,d5    ; dz
  2297.  move.l (a1,d3*8),d2
  2298.  sub.l (a1,d1*8),d2    ; dx
  2299.  sub.w d4,d6
  2300.  asr.l #7,d2
  2301.  muls d6,d2    ; new x coord
  2302.  divs d5,d2
  2303.  ext.l d2
  2304.  asl.l #7,d2
  2305.  add.l (a1,d1*8),d2
  2306.  move.w minz,d5
  2307.  move.w (a2,d1*2),d0
  2308.  divs d5,d2
  2309.  add.w #47,d2
  2310.  move.l ypos,d1
  2311.  divs d4,d1
  2312.  move.w #40,d3 
  2313.  bra lineclipped
  2314.  
  2315. bothinfront:
  2316.  
  2317. * Also, usefully enough, both are on-screen
  2318. * so no bottom clipping is needed.
  2319.  
  2320.  move.w (a2,d1*2),d0    ; first x
  2321.  move.w (a2,d3*2),d2    ; second x
  2322.  move.l ypos,d1
  2323.  move.l d1,d3
  2324.  divs d4,d1        ; first y
  2325.  divs d5,d3        ; second y
  2326. lineclipped:
  2327.  move.l #rightsidetab,a3
  2328.  cmp.w d1,d3
  2329.  beq lineflat
  2330.  st drawit
  2331.  bgt lineonright
  2332.  move.l #leftsidetab,a3
  2333.  exg d1,d3
  2334.  exg d0,d2
  2335.  
  2336.  lea (a3,d1*2),a3
  2337.  
  2338.  cmp.w top(pc),d1
  2339.  bge.s .nonewtop
  2340.  move.w d1,top
  2341. .nonewtop:
  2342.  cmp.w bottom(pc),d3
  2343.  ble.s .nonewbot
  2344.  move.w d3,bottom
  2345. .nonewbot:
  2346.  
  2347.  sub.w d1,d3    ; dy
  2348.  sub.w d0,d2    ; dx
  2349.  
  2350.  blt .linegoingleft
  2351.  sub.w #1,d0
  2352.  
  2353.  ext.l d2
  2354.  divs d3,d2
  2355.  move.w d2,d6
  2356.  swap d2
  2357.  
  2358. ; moveq #0,d6
  2359. ; sub.w d3,d2
  2360. ; blt.s .noco
  2361. ;.makeco
  2362. ; addq #1,d6
  2363. ; sub.w d3,d2
  2364. ; bge.s .makeco
  2365. ;.noco
  2366. ; add.w d3,d2
  2367.  
  2368.  move.w d3,d4
  2369.  move.w d3,d5
  2370.  subq #1,d5
  2371.  move.w d6,d1
  2372.  addq #1,d1
  2373.  
  2374. .pixlopright:
  2375.  move.w d0,(a3)+
  2376.  sub.w d2,d4
  2377.  bge.s .nobigstep
  2378.  add.w d1,d0
  2379.  add.w d3,d4
  2380.  dbra d5,.pixlopright
  2381.  bra lineflat
  2382. .nobigstep
  2383.  add.w d6,d0
  2384.  dbra d5,.pixlopright
  2385.  bra lineflat
  2386.  
  2387. .linegoingleft:
  2388.  
  2389.  sub.w #1,d0
  2390.  
  2391.  neg.w d2
  2392.  
  2393.  ext.l d2
  2394.  divs d3,d2
  2395.  move.w d2,d6
  2396.  swap d2
  2397.  
  2398.  
  2399. ; moveq #0,d6
  2400. ; sub.w d3,d2
  2401. ; blt.s .nocol
  2402. ;.makecol
  2403. ; addq #1,d6
  2404. ; sub.w d3,d2
  2405. ; bge.s .makecol
  2406. ;.nocol
  2407. ; add.w d3,d2
  2408.  
  2409.  
  2410.  
  2411.  move.w d3,d4
  2412.  move.w d3,d5
  2413.  subq #1,d5
  2414.  
  2415.  move.w d6,d1
  2416.  addq #1,d1
  2417.  
  2418. .pixlopleft:
  2419.  sub.w d2,d4
  2420.  bge.s .nobigstepl
  2421.  sub.w d1,d0
  2422.  add.w d3,d4
  2423.  move.w d0,(a3)+
  2424.  dbra d5,.pixlopleft
  2425.  bra lineflat
  2426.  
  2427. .nobigstepl
  2428.  sub.w d6,d0
  2429.  move.w d0,(a3)+
  2430.  dbra d5,.pixlopleft
  2431.  bra lineflat
  2432.  
  2433. lineonright:
  2434.  
  2435.  lea (a3,d1*2),a3
  2436.  
  2437.  cmp.w top(pc),d1
  2438.  bge.s .nonewtop
  2439.  move.w d1,top
  2440. .nonewtop:
  2441.  cmp.w bottom(pc),d3
  2442.  ble.s .nonewbot
  2443.  move.w d3,bottom
  2444. .nonewbot:
  2445.  
  2446.  sub.w d1,d3    ; dy
  2447.  sub.w d0,d2    ; dx
  2448.  blt .linegoingleft
  2449.  addq #1,d0
  2450.  ext.l d2
  2451.  divs d3,d2
  2452.  move.w d2,d6
  2453.  swap d2
  2454.  
  2455. ; moveq #0,d6
  2456. ; sub.w d3,d2
  2457. ; blt.s .noco
  2458. ;.makeco
  2459. ; addq #1,d6
  2460. ; sub.w d3,d2
  2461. ; bge.s .makeco
  2462. ;.noco
  2463. ; add.w d3,d2
  2464.  
  2465.  move.w d3,d4
  2466.  move.w d3,d5
  2467.  subq #1,d5
  2468.  move.w d6,d1
  2469.  addq #1,d1
  2470.  
  2471. .pixlopright:
  2472.  sub.w d2,d4
  2473.  bge.s .nobigstep
  2474.  add.w d1,d0
  2475.  add.w d3,d4
  2476.  move.w d0,(a3)+
  2477.  dbra d5,.pixlopright
  2478.  bra lineflat
  2479.  
  2480. .nobigstep
  2481.  add.w d6,d0
  2482.  move.w d0,(a3)+
  2483.  dbra d5,.pixlopright
  2484.  bra lineflat
  2485.  
  2486. .linegoingleft:
  2487.  addq #1,d0
  2488.  neg.w d2
  2489.  
  2490.  ext.l d2
  2491.  divs d3,d2
  2492.  move.w d2,d6
  2493.  swap d2
  2494.  
  2495.  
  2496. ; moveq #0,d6
  2497. ; sub.w d3,d2
  2498. ; blt.s .nocol
  2499. ;.makecol
  2500. ; addq #1,d6
  2501. ; sub.w d3,d2
  2502. ; bge.s .makecol
  2503. ;.nocol
  2504. ; add.w d3,d2
  2505.  
  2506.  move.w d3,d4
  2507.  move.w d3,d5
  2508.  subq #1,d5
  2509.  move.w d6,d1
  2510.  addq #1,d1
  2511.  
  2512. .pixlopleft:
  2513.  move.w d0,(a3)+
  2514.  sub.w d2,d4
  2515.  bge.s .nobigstepl
  2516.  sub.w d1,d0
  2517.  add.w d3,d4
  2518.  dbra d5,.pixlopleft
  2519.  bra lineflat
  2520.  
  2521. .nobigstepl
  2522.  sub.w d6,d0
  2523.  dbra d5,.pixlopleft
  2524.  
  2525. lineflat:
  2526.  
  2527. bothbehind:
  2528.  dbra d7,sideloop
  2529.  
  2530. pastsides:
  2531.  
  2532.  
  2533.  addq #2,a0
  2534.  
  2535.  move.w #104*4,linedir
  2536.  move.l frompt,a6
  2537.  add.l #104*4*41,a6
  2538.  move.w (a0)+,scaleval
  2539.  move.w (a0)+,whichtile
  2540.  move.w (a0)+,d6
  2541.  add.w ZoneBright,d6
  2542.  move.w d6,lighttype
  2543.  move.w above(pc),d6
  2544.  beq groundfloor
  2545. * on ceiling:
  2546.  move.w #-104*4,linedir
  2547.  suba.w #104*4,a6
  2548. groundfloor:
  2549.  
  2550.  move.w xoff,d6
  2551.  move.w zoff,d7
  2552.  move.w scaleval,d3
  2553.  move.l scaleprogfrom(pc,d3.w*4),scaleprog
  2554.  tst.w d3
  2555.  beq.s .samescale
  2556.  bgt.s .scaledown
  2557.  neg.w d3
  2558.  asr.l d3,d7
  2559.  asr.l d3,d6
  2560.  bra.s .samescale
  2561. .scaledown:
  2562.  asl.l d3,d6
  2563.  asl.l d3,d7
  2564. .samescale
  2565.  asl.w #8,d7
  2566.  move.w d6,sxoff
  2567.  move.w d7,szoff
  2568.  bra pastscale 
  2569.  
  2570.  asr.l #3,d1
  2571.  asr.l #3,d2
  2572.  asr.l #2,d1
  2573.  asr.l #2,d2
  2574.  asr.l #1,d1
  2575.  asr.l #1,d2
  2576. scaleprogfrom
  2577.  nop
  2578.  nop
  2579.  asl.l #1,d1
  2580.  asl.l #1,d2
  2581.  asl.l #2,d1
  2582.  asl.l #2,d2
  2583.  asl.l #3,d1
  2584.  asl.l #3,d2
  2585.  
  2586. top: dc.w 0
  2587. bottom: dc.w 0
  2588. ypos: dc.l 0
  2589. nfloors: dc.w 0
  2590. lighttype: dc.w 0
  2591. above: dc.w 0 
  2592. linedir: dc.w 0
  2593. distaddr: dc.w 0
  2594.  
  2595. minz: dc.w 0
  2596. leftsidetab:
  2597.  ds.w 80
  2598. rightsidetab:
  2599.  ds.w 80
  2600. leftsideclip:
  2601.  ds.w 80
  2602. rightsideclip:
  2603.  ds.w 80
  2604.  
  2605. movespd: dc.w 0
  2606. largespd: dc.l 0
  2607.  
  2608. pastscale:
  2609.  
  2610.  tst.b drawit(pc)
  2611.  beq dontdrawfloor
  2612.  
  2613.  move.l a0,-(a7)
  2614.  
  2615.  move.l #leftsidetab,a4
  2616.  move.w top(pc),d1
  2617.  move.w bottom(pc),d7
  2618.  tst.w above
  2619.  beq.s clipfloor
  2620.  
  2621.  move.w #40,d3
  2622.  move.w d3,d4
  2623.  sub.w topclip,d3
  2624.  sub.w botclip,d4
  2625.  cmp.w d3,d1
  2626.  bge predontdrawfloor
  2627.  cmp.w d4,d7
  2628.  blt predontdrawfloor
  2629.  cmp.w d4,d1
  2630.  bge.s .nocliptoproof
  2631.  move.w d4,d1
  2632. .nocliptoproof
  2633.  cmp.w d3,d7
  2634.  blt doneclip
  2635.  move.w d3,d7
  2636.  bra doneclip
  2637.  
  2638. clipfloor:
  2639.  move.w botclip,d4
  2640.  sub.w #40,d4
  2641.  cmp.w d4,d1
  2642.  bge predontdrawfloor
  2643.  move.w topclip,d3
  2644.  sub.w #40,d3
  2645.  cmp.w d3,d1
  2646.  bge.s .nocliptopfloor
  2647.  move.w d3,d1
  2648. .nocliptopfloor 
  2649.  cmp.w d3,d7
  2650.  ble predontdrawfloor
  2651.  cmp.w d4,d7
  2652.  blt.s .noclipbotfloor
  2653.  move.w d4,d7
  2654. .noclipbotfloor:
  2655.  
  2656. doneclip:
  2657.  
  2658.  lea (a4,d1*2),a4
  2659.  move.l #dists,a2
  2660.  move.w distaddr,d0
  2661.  muls #20,d0
  2662.  adda.w d0,a2
  2663.  lea (a2,d1*2),a2
  2664.  sub.w d1,d7
  2665.  ble predontdrawfloor 
  2666.  muls linedir,d1
  2667.  add.l d1,a6
  2668.  move.l #floorscalecols,a1
  2669.  move.l LineToUse,a5
  2670.  
  2671.  tst.b anyclipping
  2672.  beq dofloornoclip
  2673.  
  2674. dofloor:
  2675.  move.w (a2)+,d0
  2676.  move.w leftclip(pc),d3
  2677.  move.w rightclip(pc),d4
  2678.  move.w rightsidetab-leftsidetab(a4),d2
  2679.  addq #1,d2
  2680.  cmp.w d3,d2
  2681.  ble.s nodrawline
  2682.  cmp.w d4,d2
  2683.  ble.s noclipright
  2684.  move.w d4,d2
  2685. noclipright:
  2686.  move.w (a4),d1
  2687.  cmp.w d4,d1
  2688.  bge.s nodrawline
  2689.  cmp.w d3,d1
  2690.  bge.s noclipleft
  2691.  move.w d3,d1
  2692. noclipleft:
  2693.  cmp.w d1,d2
  2694.  ble.s nodrawline
  2695.  
  2696.  move.w d1,leftedge
  2697.  move.w d2,rightedge
  2698.  
  2699.  move.l a6,a3
  2700.  movem.l d7/a2/a4/a5/a6,-(a7)
  2701.  jsr (a5)
  2702.  movem.l (a7)+,d7/a2/a4/a5/a6
  2703. nodrawline
  2704.  adda.w linedir(pc),a6
  2705.  addq #2,a4
  2706.  subq #1,d7
  2707.  bgt dofloor
  2708.  
  2709. predontdrawfloor
  2710.  move.l (a7)+,a0
  2711.  
  2712. dontdrawfloor:
  2713.  
  2714.  CACHE_FREEZE_OFF d2
  2715.  rts
  2716.  
  2717. anyclipping: dc.w 0
  2718.  
  2719. dofloornoclip:
  2720.  move.w (a2)+,d0
  2721.  move.w rightsidetab-leftsidetab(a4),d2
  2722.  addq #1,d2
  2723.  move.w (a4)+,leftedge
  2724.  move.w d2,rightedge
  2725.  
  2726.  move.l a6,a3
  2727.  movem.l d7/a2/a4/a5/a6,-(a7)
  2728.  jsr (a5)
  2729.  movem.l (a7)+,d7/a2/a4/a5/a6
  2730.  adda.w linedir(pc),a6
  2731.  subq #1,d7
  2732.  bgt dofloornoclip
  2733.  
  2734.  bra predontdrawfloor
  2735.  
  2736. dists:
  2737.  incbin "floordists"
  2738.  
  2739. LineToUse: dc.l 0
  2740.  
  2741. ***************************
  2742. * Right then, time for the floor
  2743. * routine...
  2744. * For test purposes, give it
  2745. * a3 = point to screen
  2746. * d0= z distance away
  2747. * and sinval+cosval must be set up.
  2748. ***************************
  2749.  
  2750. leftedge: dc.w 0
  2751. rightedge: dc.w 0
  2752.  
  2753. rndpt: dc.l rndtab
  2754.  
  2755. WaterFloorLine:
  2756.  
  2757.  CACHE_OFF d2
  2758.  
  2759.  move.l rndpt,a2
  2760.  move.w (a2)+,d1
  2761.  move.w (a2)+,d2
  2762.  move.w (a2)+,d3
  2763.  cmp.l #endrnd-4,a2
  2764.  blt.s okrnd
  2765.  suba.w #98,a2
  2766. okrnd: 
  2767.  move.l a2,rndpt
  2768.  
  2769.  asr.w #6,d0
  2770.  move.w d0,d1
  2771.  move.w d0,d2
  2772.  move.w d0,d3
  2773.  move.l clipd(pc,d1.w*4),d1
  2774.  move.l clipd(pc,d2.w*4),d2
  2775.  move.l clipd(pc,d3.w*4),d3
  2776.  bra pcli
  2777.  
  2778.  dc.l 0
  2779. clipd:
  2780.  dc.l 0
  2781.  dc.l 512
  2782.  dc.l 512*2
  2783.  dc.l 512*3
  2784.  dc.l 512*4
  2785.  dc.l 512*5
  2786.  dc.l 512*6
  2787.  dc.l 512*7
  2788.  dc.l 512*8
  2789.  dc.l 512*9
  2790.  dc.l 512*10
  2791.  dc.l 512*11
  2792.  dc.l 512*12
  2793.  dc.l 512*13
  2794.  dc.l 512*14
  2795.  dc.l 512*15
  2796.  dc.l 512*15
  2797.  dc.l 512*15
  2798.  dc.l 512*15
  2799.  dc.l 512*15
  2800.  dc.l 512*15
  2801.  dc.l 512*15
  2802.  dc.l 512*15
  2803.  dc.l 512*15
  2804.  dc.l 512*15
  2805.  dc.l 512*15
  2806.  dc.l 512*15
  2807.  
  2808. pcli:
  2809.  
  2810.  move.l #brightentab,a2
  2811.  move.l a2,a4
  2812.  move.l a4,a5
  2813.  add.l d1,a2
  2814.  add.l d2,a4
  2815.  add.l d3,a5
  2816.  
  2817.  move.l #doacrossline,a1
  2818.  move.w leftedge(pc),d1
  2819.  move.w rightedge(pc),d2
  2820.  sub.w d1,d2
  2821.  move.w time(pc,d1.w*2),d1
  2822.  move.w time(pc,d2.w*2),d2
  2823.  lea (a1,d1.w),a1
  2824.  move.w (a1,d2.w),d4
  2825.  move.w #$4e75,(a1,d2.w)
  2826.  
  2827.  moveq #0,d0
  2828.  jsr (a1)
  2829.  move.w d4,(a1,d2.w)
  2830.  
  2831.  CACHE_ON d2
  2832.  
  2833.  rts
  2834.  
  2835. time:
  2836. val SET 0
  2837.  REPT 100
  2838.  dc.w val
  2839. val SET val+10
  2840.  ENDR
  2841.  
  2842. storeit: dc.l 0
  2843.  
  2844. doacrossline:
  2845.  incbin "Doacrossline"
  2846.  rts
  2847.  
  2848. dst: dc.w 0
  2849.  
  2850. FloorLine:
  2851.  
  2852.  move.l #floortile,a0
  2853.  adda.w whichtile,a0
  2854.  move.w lighttype,d1
  2855.  
  2856.  move.w d0,dst
  2857.  
  2858.  move.w d0,d2
  2859. *********************
  2860. * Old version
  2861.  asr.w #6,d2
  2862.  add.w #5,d1
  2863. *********************
  2864. ; asr.w #3,d2
  2865. ; sub.w #4,d2
  2866. ; cmp.w #6,d2
  2867. ; blt.s flbrbr
  2868. ; move.w #6,d2
  2869. ;flbrbr:
  2870. *********************
  2871.  add.w d2,d1
  2872.  bge.s .fixedbright
  2873.  moveq #0,d1
  2874. .fixedbright:
  2875.  cmp.w #28,d1
  2876.  ble.s .smallbright
  2877.  move.w #28,d1
  2878. .smallbright:
  2879.  lea floorscalecols,a1
  2880.  add.l floorbright(pc,d1.w*4),a1
  2881.  bra pastfloorbright
  2882.  
  2883. ConstCol: dc.w 0
  2884.  
  2885. BumpLine:
  2886.  
  2887.  tst.b smoothbumps
  2888.  beq.s Chunky
  2889.  
  2890.  move.l #SmoothTile,a0
  2891.  lea Smoothscalecols,a1
  2892.  bra pastast
  2893.  
  2894. Chunky:
  2895.  
  2896.  moveq #0,d2
  2897.  move.l #Bumptile,a0
  2898.  move.w whichtile,d2
  2899.  adda.w d2,a0
  2900.  ror.l #2,d2
  2901.  lsr.w #6,d2
  2902.  rol.l #2,d2
  2903.  and.w #15,d2
  2904.  move.l #ConstCols,a1
  2905.  move.w (a1,d2.w*2),ConstCol
  2906.  lea Bumpscalecols,a1
  2907.  
  2908. pastast:
  2909.  move.w lighttype,d1
  2910.  
  2911.  move.w d0,dst
  2912.  
  2913.  move.w d0,d2
  2914. *********************
  2915. * Old version
  2916.  asr.w #6,d2
  2917.  add.w #5,d1
  2918. *********************
  2919. ; asr.w #3,d2
  2920. ; sub.w #4,d2
  2921. ; cmp.w #6,d2
  2922. ; blt.s flbrbr
  2923. ; move.w #6,d2
  2924. ;flbrbr:
  2925. *********************
  2926.  add.w d2,d1
  2927.  bge.s .fixedbright
  2928.  moveq #0,d1
  2929. .fixedbright:
  2930.  cmp.w #28,d1
  2931.  ble.s .smallbright
  2932.  move.w #28,d1
  2933. .smallbright:
  2934.  add.l floorbright(pc,d1.w*4),a1
  2935.  bra pastfloorbright
  2936.  
  2937.  
  2938. floorbright:
  2939.  dc.l 512*0
  2940.  dc.l 512*1
  2941.  dc.l 512*1
  2942.  dc.l 512*2
  2943.  dc.l 512*2
  2944.  
  2945.  dc.l 512*3
  2946.  dc.l 512*3
  2947.  dc.l 512*4
  2948.  dc.l 512*4
  2949.  dc.l 512*5
  2950.  
  2951.  dc.l 512*5
  2952.  dc.l 512*6
  2953.  dc.l 512*6
  2954.  dc.l 512*7
  2955.  dc.l 512*7
  2956.  
  2957.  dc.l 512*8
  2958.  dc.l 512*8
  2959.  dc.l 512*9
  2960.  dc.l 512*9
  2961.  dc.l 512*10
  2962.  
  2963.  dc.l 512*10
  2964.  dc.l 512*11
  2965.  dc.l 512*11
  2966.  dc.l 512*12
  2967.  dc.l 512*12
  2968.  
  2969.  dc.l 512*13
  2970.  dc.l 512*13
  2971.  dc.l 512*14
  2972.  dc.l 512*14
  2973.  
  2974. widthleft: dc.w 0
  2975. scaleval: dc.w 0
  2976. sxoff: dc.w 0
  2977. szoff: dc.w 0
  2978. xoff34: dc.w 0
  2979. zoff34: dc.w 0
  2980. scosval: dc.w 0
  2981. ssinval: dc.w 0
  2982.  
  2983.  
  2984. floorsetbright:
  2985.  move.l #walltiles,a0
  2986.  
  2987. pastfloorbright
  2988.  
  2989.  
  2990.  move.w d0,d1
  2991.  muls cosval,d1    ; change in x across whole width
  2992.  move.w d0,d2
  2993.  muls sinval,d2    ; change in z across whole width
  2994.  neg.l d2
  2995. scaleprog:
  2996.  asr.l #1,d1
  2997.  asr.l #1,d2
  2998.  
  2999.  move.l d1,d3 ;    z cos
  3000.  move.l d3,d6
  3001.  move.l d3,d5
  3002.  asr.l #1,d6
  3003.  add.l d6,d3
  3004.  asr.l #1,d3
  3005.  
  3006.  move.l d2,d4    ; z sin
  3007.  move.l d4,d6
  3008.  asr.l #1,d6
  3009.  add.l d4,d6
  3010.  add.l d3,d4
  3011.  neg.l d4    ; start x
  3012.  
  3013.  asr.l #1,d6    ; zsin/2
  3014.  sub.l d6,d5    ; start z
  3015.  
  3016.  move.w d4,startsmoothx
  3017.  move.w d5,startsmoothz
  3018.  
  3019.  swap d4
  3020.  asr.l #8,d5
  3021.  add.w szoff,d5
  3022.  add.w sxoff,d4
  3023.  and.w #63,d4
  3024.  and.w #63*256,d5
  3025.  move.b d4,d5
  3026.  
  3027.  asr.l #6,d1
  3028.  asr.l #6,d2
  3029.  move.w leftedge(pc),d6
  3030.  beq.s nomultleft
  3031.  
  3032.  move.l d1,d3
  3033.  asr.l #6,d3
  3034.  muls d6,d3
  3035.  asl.l #6,d3
  3036.  swap d3
  3037.  add.b d3,d5
  3038.  
  3039.  move.l d2,d3
  3040.  asr.l #6,d3
  3041.  muls d6,d3
  3042.  asl.l #6,d3
  3043.  swap d3
  3044.  lsl.w #8,d3
  3045.  add.w d3,d5
  3046.  
  3047. nomultleft:
  3048.  
  3049.  move.w d1,a4
  3050.  move.w d2,a5
  3051.  asr.l #8,d2
  3052.  and.w #%0011111100000000,d2
  3053.  swap d1
  3054.  add.w d1,d2
  3055.  move.w #%11111100111111,d1
  3056.  and.w d1,d5
  3057.  swap d5
  3058.  move.w startsmoothz,d5
  3059.  swap d5
  3060.  swap d2
  3061.  move.w a5,d2
  3062.  swap d2
  3063.  
  3064. ***********************************
  3065.  
  3066.  move.w d6,a2
  3067.  move.l d2,d6
  3068.  add.w #256,d6
  3069.  
  3070.  moveq #0,d0
  3071.  
  3072.  tst.w a2
  3073.  beq startatleftedge
  3074.  
  3075.  move.w widthleft(pc),d4
  3076.  
  3077.  move.w rightedge(pc),d3
  3078.  
  3079.  cmp.w #31,a2
  3080.  bgt.s notinfirststrip
  3081.  lea (a3,a2.w*4),a3
  3082.  cmp.w #32,d3
  3083.  ble.s allinfirststrip
  3084.  move.w #32,d7
  3085.  sub.w d7,d3
  3086.  sub.w a2,d7
  3087.  bra intofirststrip
  3088.  
  3089. allinfirststrip
  3090.  sub.w a2,d3
  3091.  move.w d3,d7
  3092.  move.w #0,d4
  3093.  bra allintofirst
  3094.  
  3095. notinfirststrip:
  3096.  sub.w #32,a2
  3097.  sub.w #32,d3
  3098.  adda.w #33*4,a3
  3099.  cmp.w #31,a2
  3100.  bgt.s notstartinsec
  3101.  lea (a3,a2.w*4),a3
  3102.  cmp.w #32,d3
  3103.  ble.s allinsecstrip
  3104.  move.w #32,d7
  3105.  sub.w d7,d3
  3106.  sub.w a2,d7
  3107.  move.w d3,d4
  3108.  bra tstwat
  3109.  
  3110. allinsecstrip
  3111.  sub.w a2,d3
  3112.  move.w d3,d7
  3113.  move.w #0,d4
  3114.  bra tstwat
  3115.  rts
  3116.  
  3117. notstartinsec:
  3118.  sub.w #32,a2
  3119.  sub.w #32,d3
  3120.  adda.w #33*4,a3
  3121.  lea (a3,a2.w*4),a3
  3122.  cmp.w #32,d3
  3123.  ble.s allinthirdstrip
  3124.  move.w #32,d7
  3125.  sub.w d7,d3
  3126.  sub.w a2,d7
  3127.  move.w d3,d4
  3128.  bra tstwat
  3129.  rts
  3130.  
  3131. allinthirdstrip
  3132.  sub.w a2,d3
  3133.  move.w d3,d7
  3134.  move.w #0,d4
  3135.  bra tstwat
  3136.  rts
  3137.  
  3138. startatleftedge:
  3139.  
  3140.  move.w rightedge(pc),d3
  3141.  sub.w a2,d3
  3142.  
  3143.  move.w d3,d7
  3144.  cmp.w #32,d7
  3145.  ble.s .notoowide
  3146.  move.w #32,d7
  3147. .notoowide:
  3148.  sub.w d7,d3
  3149. intofirststrip:
  3150.  
  3151.  move.w d3,d4
  3152. allintofirst:
  3153.  
  3154.  move.w startsmoothx,d3
  3155.  
  3156. tstwat:
  3157.  
  3158.  tst.b usewater
  3159.  bne texturedwater
  3160.  
  3161.  
  3162. ******************************
  3163. * BumpMap the floor/ceiling! *
  3164.  tst.b usebumps
  3165.  bne.s BumpMap
  3166. ******************************
  3167.  
  3168. ordinary:
  3169.  moveq #0,d0
  3170.  
  3171.  dbra d7,acrossscrn
  3172.  rts
  3173.  
  3174. usebumps: dc.w $0
  3175. smoothbumps: dc.w $0
  3176.  
  3177.  include "ab3:source/bumpmap.s"
  3178.  
  3179.  CNOP 0,4
  3180. backbefore:
  3181.  and.w d1,d5
  3182.  move.b (a0,d5.w*4),d0
  3183.  move.w (a1,d0.w*2),(a3)
  3184.  addq #4,a3
  3185.  add.w a4,d3
  3186.  addx.l d6,d5
  3187.  dbcs d7,acrossscrn
  3188.  dbcc d7,backbefore
  3189.  bcc.s past1
  3190.  add.w #256,d5 
  3191.  bra.s past1
  3192.  
  3193. acrossscrn:
  3194.  and.w d1,d5
  3195.  move.b (a0,d5.w*4),d0
  3196.  move.w (a1,d0.w*2),(a3)
  3197.  addq #4,a3
  3198.  add.w a4,d3
  3199.  addx.l d2,d5
  3200.  dbcs d7,acrossscrn
  3201.  dbcc d7,backbefore
  3202.  bcc.s past1
  3203.  add.w #256,d5 
  3204. past1:
  3205.  
  3206.  move.w d4,d7
  3207.  bne.s .notdoneyet
  3208.  CACHE_FREEZE_ON d2
  3209.  rts
  3210. .notdoneyet:
  3211.  
  3212.  cmp.w #32,d7
  3213.  ble.s .notoowide
  3214.  move.w #32,d7
  3215. .notoowide
  3216.  sub.w d7,d4  
  3217.  addq #4,a3
  3218.  
  3219.  dbra d7,acrossscrn
  3220.  CACHE_FREEZE_ON d2
  3221.  rts
  3222.  
  3223. waterpt: dc.l waterlist
  3224.  
  3225. waterlist:
  3226.  dc.l waterfile
  3227.  dc.l waterfile+2
  3228.  dc.l waterfile+256
  3229.  dc.l waterfile+256+2
  3230.  dc.l waterfile+512
  3231.  dc.l waterfile+512+2
  3232.  dc.l waterfile+768
  3233.  dc.l waterfile+768+2
  3234. ; dc.l waterfile+768
  3235. ; dc.l waterfile+512+2
  3236. ; dc.l waterfile+512
  3237. ; dc.l waterfile+256+2
  3238. ; dc.l waterfile+256
  3239. ; dc.l waterfile+2
  3240. endwaterlist:
  3241.  
  3242. watertouse: dc.l waterfile
  3243.  
  3244. wtan: dc.w 0
  3245. wateroff: dc.w 0
  3246.  
  3247. texturedwater:
  3248.  
  3249.  add.w wateroff,d5
  3250.  
  3251.  move.l #brightentab,a1
  3252.  move.w dst,d0
  3253.  clr.b d0
  3254.  add.w d0,d0
  3255.  adda.w d0,a1
  3256.  
  3257.  move.w dst,d0
  3258.  asl.w #7,d0
  3259.  add.w wtan,d0
  3260.  and.w #8191,d0
  3261.  move.l #SineTable,a0
  3262.  move.w (a0,d0.w),d0
  3263.  ext.l d0
  3264.  move.w dst,d3
  3265.  add.w #300,d3
  3266.  divs d3,d0
  3267.  asr.w #6,d0
  3268.  add.w #2,d0
  3269.  
  3270.  move.w dst,d3
  3271.  asr.w #7,d3
  3272.  add.w d3,d0
  3273.  
  3274.  muls #104*4,d0
  3275.  move.w d0,a6
  3276.  
  3277.  move.l watertouse,a0
  3278.  
  3279.  move.w startsmoothx,d3
  3280.  dbra d7,acrossscrnw
  3281.  rts
  3282.  
  3283. backbeforew:
  3284.  and.w d1,d5
  3285.  move.w (a0,d5.w*4),d0
  3286.  move.b 1(a3,a6.w),d0
  3287.  move.w (a1,d0.w*2),(a3)
  3288.  addq #4,a3
  3289.  add.w a4,d3
  3290.  addx.l d6,d5
  3291.  dbcs d7,acrossscrnw
  3292.  dbcc d7,backbeforew
  3293.  bcc.s past1w
  3294.  add.w #256,d5 
  3295.  bra.s past1w
  3296.  
  3297. acrossscrnw:
  3298.  and.w d1,d5
  3299.  move.w (a0,d5.w*4),d0
  3300.  move.b 1(a3,a6.w),d0
  3301.  move.w (a1,d0.w*2),(a3)
  3302.  addq #4,a3
  3303.  add.w a4,d3
  3304.  addx.l d2,d5
  3305.  dbcs d7,acrossscrnw
  3306.  dbcc d7,backbeforew
  3307.  bcc.s past1w
  3308.  add.w #256,d5 
  3309. past1w:
  3310.  
  3311.  move.w d4,d7
  3312.  bne.s .notdoneyet
  3313.  rts
  3314. .notdoneyet:
  3315.  
  3316.  cmp.w #32,d7
  3317.  ble.s .notoowide
  3318.  move.w #32,d7
  3319. .notoowide
  3320.  sub.w d7,d4  
  3321.  addq #4,a3
  3322.  
  3323.  dbra d7,acrossscrnw
  3324.  CACHE_FREEZE_ON d2
  3325.  rts
  3326.  
  3327. usewater: dc.w 0
  3328. startsmoothx: dc.w 0
  3329. startsmoothz: dc.w 0
  3330. drawit: dc.w 0
  3331.  
  3332. ********************************
  3333. *
  3334.  include "AB3:source/ObjDraw3.chipram"
  3335. *
  3336. ********************************
  3337.  
  3338. numframes:
  3339.  dc.w 0
  3340.  
  3341. alframe: dc.l Objects+4096
  3342.  
  3343. alan:
  3344.  dcb.l 6,256*65536
  3345.  dcb.l 6,256*2*65536
  3346.  dcb.l 6,256*5*65536
  3347.  dcb.l 6,256*6*65536
  3348. endalan:
  3349.  
  3350. alanptr: dc.l alan
  3351.  
  3352. Time2: dc.l 0
  3353. dispco:
  3354.  dc.w 0
  3355.  
  3356. KInt_Init    ;VBR Assumed $0
  3357.         move.l $68.w,OLDKINT
  3358.         Move.l    #KInt_Main,$68.w    Install Interrupt 
  3359.         And.b    #$3f,$bfe201        Set Timers
  3360.         Move.b    #$7f,$bfed01
  3361.         Move.b    $bfed01,d0
  3362.         Move.b    #$88,$bfed01
  3363.         St.b    KInt_CCode        
  3364.         Move.b    #$a0,$bfee01        Start Timey Thing
  3365.         Rts                And return
  3366.  
  3367. OLDKINT: dc.l 0
  3368.  
  3369. KInt_Main    
  3370.         Movem.l    d0/d1/a0/a1/a6,-(a7)    Stack everything
  3371.         Move.w    #8,$dff09a        Temp Disable Int.
  3372.         Move.w    $dff01e,d0        Intreqr
  3373.         And.w    #8,d0            Mask Out All X^ K_Int
  3374.     Beq    KInt_End            Not Keyboard Interrupt
  3375.         Lea    $bfed01,a6
  3376.         Move.w    #$8,$dff09c        Clear Int.Request
  3377.         Move.b    -$100(a6),d0        Move Raw Keyboard value
  3378.         Ror.b    #1,d0            Roll to correct
  3379.         Not.b    d0            
  3380.         Move.b    d0,KInt_CCode        Save Corrected Keycode
  3381. .HandShake    Move.b    #8,(a6)
  3382.         Move.b    #7,-$900(a6)
  3383.         Move.b    #0,-$800(a6)
  3384.         Move.b    #0,-$100(a6)
  3385.         Move.b    #$d1,$100(a6)        
  3386.         Tst.b    (a6)    
  3387. .wait        Btst    #0,(a6)
  3388.     Beq.s    .wait
  3389.         Move.b    #$a0,$100(a6)        
  3390.         Move.b    (a6),d0        
  3391.         Move.b    #$88,(a6)
  3392.         Lea    KeyMap,a1
  3393.         Moveq.w    #0,d0
  3394.         Move.b    KInt_CCode(pc),d0
  3395.     Bmi.s    KInt_KeyUp            neg if up 
  3396.  
  3397. KInt_KeyDown
  3398.         st (a1,d0.w)
  3399.     Bra    KInt_End
  3400.  
  3401. KInt_KeyUp
  3402.         And.w    #$7f,d0            Make code Positive
  3403.         clr.b (a1,d0.w)
  3404. KInt_End    Movem.l    (a7)+,d0/d1/a0/a1/a6    Unstack Everything
  3405.     
  3406.         Move.w    #$8008,$dff09a        Re-enable Int.
  3407.         Rte
  3408.  
  3409. KInt_CCode    Ds.b    1
  3410. KInt_Askey    Ds.b    1
  3411. KInt_OCode    Ds.w    1
  3412.  
  3413.  
  3414. PLR1_mouse_control
  3415.  jsr ReadMouse
  3416.  move.l #SineTable,a0
  3417.  move.w PLR1s_angspd,d1
  3418.  move.w PLR1s_angpos,d0
  3419.  move.w (a0,d0.w),PLR1s_sinval
  3420.  adda.w #2048,a0
  3421.  move.w (a0,d0.w),PLR1s_cosval
  3422.  
  3423.  move.l PLR1s_xspdval,d6
  3424.  move.l PLR1s_zspdval,d7
  3425.  
  3426.  neg.l d6
  3427.  ble.s .nobug1
  3428.  asr.l #1,d6
  3429.  add.l #1,d6
  3430.  bra.s .bug1
  3431. .nobug1
  3432.  asr.l #1,d6
  3433. .bug1:
  3434.  
  3435.  neg.l d7
  3436.  ble.s .nobug2
  3437.  asr.l #1,d7
  3438.  add.l #1,d7
  3439.  bra.s .bug2
  3440. .nobug2
  3441.  asr.l #1,d7
  3442. .bug2: 
  3443.  
  3444.  move.w PLR1s_sinval,d1
  3445.  move.w PLR1s_cosval,d2
  3446.  
  3447.  move.w d2,d4
  3448.  move.w d1,d5
  3449.  muls lrs,d4
  3450.  muls lrs,d5
  3451.  
  3452.  move.w ymouse,d3
  3453.  sub.w oldymouse,d3
  3454.  add.w d3,oldymouse
  3455.  asr.w #1,d3
  3456.  cmp.w #50,d3
  3457.  ble.s nofastfor
  3458.  move.w #50,d3
  3459. nofastfor:
  3460.  cmp.w #-50,d3
  3461.  bge.s nofastback
  3462.  move.w #-50,d3
  3463. nofastback:
  3464.  
  3465.  muls d3,d2
  3466.  muls d3,d1
  3467.  sub.l d4,d1
  3468.  add.l d5,d2
  3469.  
  3470.  sub.l d1,d6
  3471.  sub.l d2,d7
  3472.  add.l d6,PLR1s_xspdval
  3473.  add.l d7,PLR1s_zspdval
  3474.  move.l PLR1s_xspdval,d6
  3475.  move.l PLR1s_zspdval,d7
  3476.  add.l d6,PLR1s_xoff
  3477.  add.l d7,PLR1s_zoff
  3478.  
  3479.  tst.b PLR1_fire
  3480.  beq.s .firenotpressed
  3481. ; fire was pressed last time.
  3482.  btst #6,$bfe001
  3483.  bne.s .firenownotpressed
  3484. ; fire is still pressed this time.
  3485.  st PLR1_fire
  3486.  bra .doneplr1
  3487.  
  3488. .firenownotpressed:
  3489. ; fire has been released.
  3490.  clr.b PLR1_fire
  3491.  bra .doneplr1
  3492.  
  3493. .firenotpressed
  3494.  
  3495. ; fire was not pressed last frame...
  3496.  
  3497.  btst #6,$bfe001
  3498. ; if it has still not been pressed, go back above
  3499.  bne.s .firenownotpressed
  3500. ; fire was not pressed last time, and was this time, so has
  3501. ; been clicked.
  3502.  st PLR1_clicked
  3503.  st PLR1_fire
  3504.  
  3505. .doneplr1:
  3506.  move.l PLR1s_tyoff,d0
  3507.  move.l PLR1s_yoff,d1
  3508.  move.l PLR1s_yvel,d2
  3509.  sub.l d1,d0
  3510.  bgt.s .aboveground
  3511.  sub.l #1024,d2
  3512.  blt.s .notfast
  3513.  sub.l #2048,d2
  3514. .notfast:
  3515.  add.l d2,d1
  3516.  sub.l d2,d0
  3517.  blt.s .pastitall
  3518.  move.l #0,d2
  3519.  add.l d0,d1
  3520.  bra.s .pastitall
  3521.  
  3522. .aboveground:
  3523.  add.l d2,d1
  3524.  add.l #1024,d2
  3525. .pastitall:
  3526.  
  3527.  move.l d2,PLR1s_yvel
  3528.  move.l d1,PLR1s_yoff
  3529.  
  3530.  rts
  3531.  
  3532. PLR1_follow_path:
  3533.  
  3534.  move.l pathpt,a0
  3535.  move.w (a0),d1
  3536.  move.w d1,PLR1s_xoff
  3537.  move.w 2(a0),d1
  3538.  move.w d1,PLR1s_zoff
  3539.  move.w 4(a0),d0
  3540.  add.w d0,d0
  3541.  and.w #8190,d0
  3542.  move.w d0,PLR1_angpos
  3543.  
  3544.  move.w TempFrames,d0
  3545.  asl.w #3,d0
  3546.  adda.w d0,a0
  3547.  
  3548.  cmp.l #endpath,a0
  3549.  blt notrestartpath
  3550.  move.l #Path,a0
  3551. notrestartpath:
  3552.  move.l a0,pathpt
  3553.  
  3554.  rts
  3555.  
  3556. PLR1_keyboard_control:
  3557.  
  3558.  move.l #SineTable,a0
  3559.  move.w PLR1s_angpos,d0
  3560.  
  3561.  move.l #KeyMap,a5
  3562.  move.w #70,d1
  3563.  move.w #7,d2
  3564.  tst.b $61(a5)
  3565.  beq.s nofaster
  3566.  move.w #120,d1
  3567.  move.w #10,d2
  3568. nofaster:
  3569.  
  3570.  moveq #0,d4 
  3571. ; tst.b $67(a5)
  3572. ; bne.s slidelr
  3573.  
  3574.  tst.b $4f(a5)
  3575.  beq.s noleftturn
  3576.  sub.w d1,d0
  3577. noleftturn
  3578.  move.l #KeyMap,a5
  3579.  tst.b $4e(a5)
  3580.  beq.s norightturn
  3581.  add.w d1,d0
  3582. norightturn
  3583. ; bra.s noslide
  3584.  
  3585. slidelr:
  3586.  tst.b $39(a5)
  3587.  beq.s noleftslide
  3588.  move.w d2,d4
  3589.  asr.w #1,d4
  3590. noleftslide
  3591.  move.l #KeyMap,a5
  3592.  tst.b $3a(a5)
  3593.  beq.s norightslide
  3594.  sub.w d2,d4
  3595.  asr.w #1,d4
  3596. norightslide
  3597.   
  3598. noslide:
  3599.   
  3600.  and.w #8191,d0
  3601.  move.w d0,PLR1s_angpos
  3602.  
  3603.  move.w (a0,d0.w),PLR1s_sinval
  3604.  adda.w #2048,a0
  3605.  move.w (a0,d0.w),PLR1s_cosval
  3606.  
  3607.  move.l PLR1s_xspdval,d6
  3608.  move.l PLR1s_zspdval,d7
  3609.  
  3610.  neg.l d6
  3611.  ble.s .nobug1
  3612.  asr.l #1,d6
  3613.  add.l #1,d6
  3614.  bra.s .bug1
  3615. .nobug1
  3616.  asr.l #1,d6
  3617. .bug1:
  3618.  
  3619.  neg.l d7
  3620.  ble.s .nobug2
  3621.  asr.l #1,d7
  3622.  add.l #1,d7
  3623.  bra.s .bug2
  3624. .nobug2
  3625.  asr.l #1,d7
  3626. .bug2: 
  3627.  
  3628.  moveq #0,d3
  3629.  
  3630.  tst.b $4c(a5)
  3631.  beq.s noforward
  3632.  neg.w d2
  3633.  move.w d2,d3
  3634. noforward:
  3635.  tst.b $4d(a5)
  3636.  beq.s nobackward
  3637.  move.w d2,d3
  3638. nobackward:
  3639.  
  3640.  move.w PLR1s_sinval,d1
  3641.  muls d3,d1
  3642.  move.w PLR1s_cosval,d2
  3643.  muls d3,d2
  3644.  
  3645.  sub.l d1,d6
  3646.  sub.l d2,d7
  3647.  move.w PLR1s_sinval,d1
  3648.  muls d4,d1
  3649.  move.w PLR1s_cosval,d2
  3650.  muls d4,d2
  3651.  sub.l d2,d6
  3652.  add.l d1,d7
  3653.  
  3654.  add.l d6,PLR1s_xspdval
  3655.  add.l d7,PLR1s_zspdval
  3656.  move.l PLR1s_xspdval,d6
  3657.  move.l PLR1s_zspdval,d7
  3658.  add.l d6,PLR1s_xoff
  3659.  add.l d7,PLR1s_zoff
  3660.  
  3661.  tst.b PLR1_fire
  3662.  beq.s .firenotpressed
  3663. ; fire was pressed last time.
  3664.  tst.b $65(a5)
  3665.  beq.s .firenownotpressed
  3666. ; fire is still pressed this time.
  3667.  st PLR1_fire
  3668.  bra .doneplr1
  3669.  
  3670. .firenownotpressed:
  3671. ; fire has been released.
  3672.  clr.b PLR1_fire
  3673.  bra .doneplr1
  3674.  
  3675. .firenotpressed
  3676.  
  3677. ; fire was not pressed last frame...
  3678.  
  3679.  tst.b $65(a5)
  3680. ; if it has still not been pressed, go back above
  3681.  beq.s .firenownotpressed
  3682. ; fire was not pressed last time, and was this time, so has
  3683. ; been clicked.
  3684.  st PLR1_clicked
  3685.  st PLR1_fire
  3686.  
  3687. .doneplr1:
  3688.  
  3689.  move.l PLR1s_tyoff,d0
  3690.  move.l PLR1s_yoff,d1
  3691.  move.l PLR1s_yvel,d2
  3692.  sub.l d1,d0
  3693.  bgt.s .aboveground
  3694.  sub.l #1024,d2
  3695.  blt.s .notfast
  3696.  sub.l #2048,d2
  3697. .notfast:
  3698.  add.l d2,d1
  3699.  sub.l d2,d0
  3700.  blt.s .pastitall
  3701.  move.l #0,d2
  3702.  add.l d0,d1
  3703.  bra.s .pastitall
  3704.  
  3705. .aboveground:
  3706.  add.l d2,d1
  3707.  add.l #1024,d2
  3708. .pastitall:
  3709.  
  3710.  move.l d2,PLR1s_yvel
  3711.  move.l d1,PLR1s_yoff
  3712.  
  3713.  rts
  3714.  
  3715.  
  3716. Chan0inter:
  3717.  
  3718.  move.w #$0010,$dff000+intreq
  3719.  
  3720.  addq.w #1,FramesToDraw
  3721.  tst.b counting
  3722.  beq nostopcounter
  3723.  JSR STOPCOUNTNOADD
  3724. nostopcounter:
  3725.  movem.l d0-d7/a0-a6,-(a7)
  3726.  
  3727.  
  3728.  tst.b oktodisplay
  3729.  beq dontshowtime
  3730.  clr.b oktodisplay
  3731. ; subq.w #1,dispco
  3732. ; bgt dontshowtime
  3733. ; move.w #10,dispco
  3734.  
  3735.  move.l #TimerScr+10,a0
  3736.  move.l TimeCount,d0
  3737.  bge.s timenotneg
  3738.  move.l #1111*256,d0
  3739. timenotneg:
  3740.  asr.l #8,d0
  3741.  move.l #digits,a1
  3742.  move.w #7,d2
  3743. digitlop
  3744.  divs #10,d0
  3745.  swap d0
  3746.  lea (a1,d0.w*8),a2
  3747.  move.b (a2)+,(a0)
  3748.  move.b (a2)+,24(a0)
  3749.  move.b (a2)+,24*2(a0)
  3750.  move.b (a2)+,24*3(a0)
  3751.  move.b (a2)+,24*4(a0)
  3752.  move.b (a2)+,24*5(a0)
  3753.  move.b (a2)+,24*6(a0)
  3754.  move.b (a2)+,24*7(a0)
  3755.  subq #1,a0
  3756.  swap d0
  3757.  ext.l d0
  3758.  dbra d2,digitlop
  3759.  
  3760.  move.l #TimerScr+10+24*10,a0
  3761.  move.l NumTimes,d0
  3762.  move.l #digits,a1
  3763.  move.w #3,d2
  3764. digitlop2
  3765.  divs #10,d0
  3766.  swap d0
  3767.  lea (a1,d0.w*8),a2
  3768.  move.b (a2)+,(a0)
  3769.  move.b (a2)+,24(a0)
  3770.  move.b (a2)+,24*2(a0)
  3771.  move.b (a2)+,24*3(a0)
  3772.  move.b (a2)+,24*4(a0)
  3773.  move.b (a2)+,24*5(a0)
  3774.  move.b (a2)+,24*6(a0)
  3775.  move.b (a2)+,24*7(a0)
  3776.  subq #1,a0
  3777.  swap d0
  3778.  ext.l d0
  3779.  dbra d2,digitlop2
  3780.  
  3781.  move.l #TimerScr+10+24*20,a0
  3782.  moveq #0,d0
  3783.  move.w FrameNum,d0
  3784.  move.l #digits,a1
  3785.  move.w #2,d2
  3786. digitlop3
  3787.  divs #10,d0
  3788.  swap d0
  3789.  lea (a1,d0.w*8),a2
  3790.  move.b (a2)+,(a0)
  3791.  move.b (a2)+,24(a0)
  3792.  move.b (a2)+,24*2(a0)
  3793.  move.b (a2)+,24*3(a0)
  3794.  move.b (a2)+,24*4(a0)
  3795.  move.b (a2)+,24*5(a0)
  3796.  move.b (a2)+,24*6(a0)
  3797.  move.b (a2)+,24*7(a0)
  3798.  subq #1,a0
  3799.  swap d0
  3800.  ext.l d0
  3801.  dbra d2,digitlop3
  3802.  
  3803. dontshowtime:
  3804.  
  3805.  move.w Robotanimpos,d0
  3806.  add.w #6*38,d0
  3807.  cmp.w #6*38*64,d0
  3808.  blt.s norebot
  3809.  move.w #0,d0
  3810. norebot:
  3811.  move.w d0,Robotanimpos
  3812.  
  3813.  tst.w d0
  3814.  seq d1
  3815.  cmp.w #6*32*38,d0
  3816.  seq d2
  3817.  or.b d2,d1
  3818.  or.b d1,clump
  3819.  
  3820.  move.w Robotarmpos,d0
  3821.  add.w #6*14,d0
  3822.  cmp.w #6*14*64,d0
  3823.  blt.s norebot2
  3824.  move.w #0,d0
  3825. norebot2:
  3826.  move.w d0,Robotarmpos
  3827.  
  3828.  move.l alanptr,a0
  3829.  move.l (a0)+,alframe
  3830.  cmp.l #endalan,a0
  3831.  blt.s nostartalan
  3832.  move.l #alan,a0
  3833. nostartalan:
  3834.  move.l a0,alanptr
  3835.  
  3836.  move.l #$dff000,a6
  3837.  
  3838.  cmp.b #'4',option+2
  3839.  bne.s nomuckabout
  3840.  
  3841.  move.w #$0,d0 
  3842.  tst.b NoiseMade0
  3843.  beq.s noturnoff0
  3844.  move.w #1,d0
  3845. noturnoff0:
  3846.  tst.b NoiseMade1
  3847.  beq.s noturnoff1
  3848.  or.w #2,d0
  3849. noturnoff1:
  3850.  tst.b NoiseMade2
  3851.  beq.s noturnoff2
  3852.  or.w #4,d0
  3853. noturnoff2:
  3854.  tst.b NoiseMade3
  3855.  beq.s noturnoff3
  3856.  or.w #8,d0
  3857. noturnoff3:
  3858.  move.w d0,dmacon(a6)
  3859.  
  3860. nomuckabout:
  3861.  
  3862.  tst.b PLR1MOUSE
  3863.  beq.s PLR1_nomouse
  3864.  bsr PLR1_mouse_control
  3865. PLR1_nomouse:
  3866.  tst.b PLR1KEYS
  3867.  beq.s PLR1_nokeys
  3868.  bsr PLR1_keyboard_control
  3869. PLR1_nokeys:
  3870.  tst.b PLR1PATH
  3871.  beq.s PLR1_nopath
  3872.  bsr PLR1_follow_path
  3873. PLR1_nopath:
  3874.  
  3875.  bclr.b #4,Conditions
  3876.  move.l #KeyMap,a5
  3877.  tst.b $40(a5)
  3878.  beq.s nospace
  3879.  bset.b #4,Conditions
  3880. nospace:
  3881.  
  3882.  tst.b PLR2_fire
  3883.  beq.s firenotpressed2
  3884. ; fire was pressed last time.
  3885.  btst #7,$bfe001
  3886.  bne.s firenownotpressed2
  3887. ; fire is still pressed this time.
  3888.  st PLR2_fire
  3889.  bra dointer
  3890.  
  3891. firenownotpressed2:
  3892. ; fire has been released.
  3893.  clr.b PLR2_fire
  3894.  bra dointer
  3895.  
  3896. firenotpressed2
  3897.  
  3898. ; fire was not pressed last frame...
  3899.  
  3900.  btst #7,$bfe001
  3901. ; if it has still not been pressed, go back above
  3902.  bne.s firenownotpressed2
  3903. ; fire was not pressed last time, and was this time, so has
  3904. ; been clicked.
  3905.  st PLR2_clicked
  3906.  st PLR2_fire
  3907.  
  3908. dointer
  3909.  
  3910.  cmp.b #'4',option+2
  3911.  beq fourchannel
  3912.  
  3913.  btst #7,$dff000+intreqrl
  3914.  bne.s newsampbitl
  3915.  
  3916.  movem.l (a7)+,d0-d7/a0-a6
  3917.  tst.b counting
  3918.  beq .nostartcounter
  3919.  JSR STARTCOUNT
  3920. .nostartcounter:
  3921. noneed:
  3922.  
  3923.  rte
  3924.  
  3925. swappedem: dc.w 0
  3926.  
  3927. newsampbitl:
  3928.  
  3929.  move.w #$820f,$dff000+dmacon
  3930.  
  3931.  move.w #$80,$dff000+intreq
  3932.  
  3933.  move.l pos0,a0
  3934.  move.l pos1,a1
  3935.  
  3936.  move.l #tab,a2
  3937.  
  3938.  moveq #0,d0
  3939.  moveq #0,d1
  3940.  move.b vol0left,d0
  3941.  move.b vol1left,d1
  3942.  cmp.b d1,d0
  3943.  bge.s fbig0
  3944.  
  3945. ; d1 is bigger so scale d0 and use d1
  3946. ; as audiochannel volume.
  3947.  
  3948.  exg a0,a1
  3949.  asl.w #6,d0
  3950.  divs d1,d0
  3951.  lsl.w #8,d0
  3952.  adda.w d0,a2
  3953.  move.w d1,$dff0a8
  3954.  bra.s donechan0
  3955.  
  3956. fbig0:
  3957.  tst.w d0
  3958.  beq.s donechan0
  3959.  asl.w #6,d1
  3960.  divs d0,d1
  3961.  lsl.w #8,d1
  3962.  adda.w d1,a2
  3963.  move.w d0,$dff0a8
  3964.  
  3965. donechan0:
  3966.  
  3967.  
  3968.  move.l Aupt0,a3
  3969.  move.l a3,$dff0a0
  3970.  move.l Auback0,Aupt0
  3971.  move.l a3,Auback0
  3972.  
  3973.  move.l Auback0,a3
  3974.  
  3975.  moveq #0,d0
  3976.  moveq #0,d1
  3977.  moveq #0,d2
  3978.  moveq #0,d3
  3979.  moveq #0,d4
  3980.  moveq #0,d5
  3981.  move.w #49,d7
  3982. loop:
  3983.  move.l (a0)+,d0
  3984.  move.b (a1)+,d1
  3985.  move.b (a1)+,d2
  3986.  move.b (a1)+,d3
  3987.  move.b (a1)+,d4
  3988.  move.b (a2,d3.w),d5
  3989.  swap d5
  3990.  move.b (a2,d1.w),d5
  3991.  asl.l #8,d5
  3992.  move.b (a2,d2.w),d5
  3993.  swap d5
  3994.  move.b (a2,d4.w),d5
  3995.  add.l d5,d0
  3996.  move.l d0,(a3)+
  3997.  dbra d7,loop
  3998.  
  3999.  move.l pos0,a0
  4000.  move.l pos1,a1
  4001.  
  4002.  move.l Aupt1,a3
  4003.  move.l a3,$dff0b0
  4004.  move.l Auback1,Aupt1
  4005.  move.l a3,Auback1
  4006.  
  4007.  move.l #tab,a2
  4008.  
  4009.  moveq #0,d0
  4010.  moveq #0,d1
  4011.  move.b vol0right,d0
  4012.  move.b vol1right,d1
  4013.  cmp.b d1,d0
  4014.  slt swappedem
  4015.  bge.s fbig1
  4016.  
  4017. ; d1 is bigger so scale d0 and use d1
  4018. ; as audiochannel volume.
  4019.  
  4020.  exg a0,a1
  4021.  asl.w #6,d0
  4022.  divs d1,d0
  4023.  lsl.w #8,d0
  4024.  adda.w d0,a2
  4025.  move.w d1,$dff0b8
  4026.  bra.s donechan1
  4027.  
  4028. fbig1:
  4029.  tst.w d0
  4030.  beq.s donechan1
  4031.  asl.w #6,d1
  4032.  divs d0,d1
  4033.  lsl.w #8,d1
  4034.  adda.w d1,a2
  4035.  move.w d0,$dff0b8
  4036.  
  4037. donechan1:
  4038.  moveq #0,d0
  4039.  moveq #0,d1
  4040.  moveq #0,d2
  4041.  moveq #0,d3
  4042.  moveq #0,d4
  4043.  moveq #0,d5
  4044.  move.w #49,d7
  4045. loop2:
  4046.  move.l (a0)+,d0
  4047.  move.b (a1)+,d1
  4048.  move.b (a1)+,d2
  4049.  move.b (a1)+,d3
  4050.  move.b (a1)+,d4
  4051.  move.b (a2,d3.w),d5
  4052.  swap d5
  4053.  move.b (a2,d1.w),d5
  4054.  asl.l #8,d5
  4055.  move.b (a2,d2.w),d5
  4056.  swap d5
  4057.  move.b (a2,d4.w),d5
  4058.  add.l d5,d0
  4059.  move.l d0,(a3)+
  4060.  dbra d7,loop2
  4061.  
  4062.  tst.b swappedem
  4063.  beq.s ok01
  4064.  exg a0,a1
  4065. ok01:
  4066.  
  4067.  cmp.l Samp0end,a0
  4068.  blt.s notoffendsamp1
  4069.  move.l #bass,a0
  4070.  move.l #bassend,Samp0end
  4071.  move.b #64,vol0left
  4072.  move.b #64,vol0right
  4073.  tst.b backbeat
  4074.  bne.s playbeat
  4075.  move.l #empty,a0
  4076.  move.l #emptyend,Samp0end
  4077.  move.b #0,vol0left
  4078.  move.b #0,vol0right
  4079. playbeat:
  4080. notoffendsamp1:
  4081.  
  4082.  cmp.l Samp1end,a1
  4083.  blt.s notoffendsamp2
  4084.  move.l #empty,a1
  4085.  move.l #emptyend,Samp1end
  4086.  move.b #0,vol1left
  4087.  move.b #0,vol1right
  4088. notoffendsamp2:
  4089.  
  4090.  move.l a0,pos0
  4091.  move.l a1,pos1
  4092.  
  4093. ******************* Other two channels
  4094.  
  4095.  move.l pos2,a0
  4096.  move.l pos3,a1
  4097.  
  4098.  move.l #tab,a2
  4099.  
  4100.  moveq #0,d0
  4101.  moveq #0,d1
  4102.  move.b vol2left,d0
  4103.  move.b vol3left,d1
  4104.  cmp.b d1,d0
  4105.  bge.s fbig2
  4106.  
  4107. ; d1 is bigger so scale d0 and use d1
  4108. ; as audiochannel volume.
  4109.  
  4110.  exg a0,a1
  4111.  asl.w #6,d0
  4112.  divs d1,d0
  4113.  lsl.w #8,d0
  4114.  adda.w d0,a2
  4115.  move.w d1,$dff0d8
  4116.  bra.s donechan2
  4117.  
  4118. fbig2:
  4119.  tst.w d0
  4120.  beq.s donechan2
  4121.  asl.w #6,d1
  4122.  divs d0,d1
  4123.  lsl.w #8,d1
  4124.  adda.w d1,a2
  4125.  move.w d0,$dff0d8
  4126.  
  4127. donechan2:
  4128.  
  4129.  move.l Aupt2,a3
  4130.  move.l a3,$dff0d0
  4131.  move.l Auback2,Aupt2
  4132.  move.l a3,Auback2
  4133.  
  4134.  moveq #0,d0
  4135.  moveq #0,d1
  4136.  moveq #0,d2
  4137.  moveq #0,d3
  4138.  moveq #0,d4
  4139.  moveq #0,d5
  4140.  move.w #49,d7
  4141. loop3:
  4142.  move.l (a0)+,d0
  4143.  move.b (a1)+,d1
  4144.  move.b (a1)+,d2
  4145.  move.b (a1)+,d3
  4146.  move.b (a1)+,d4
  4147.  move.b (a2,d3.w),d5
  4148.  swap d5
  4149.  move.b (a2,d1.w),d5
  4150.  asl.l #8,d5
  4151.  move.b (a2,d2.w),d5
  4152.  swap d5
  4153.  move.b (a2,d4.w),d5
  4154.  add.l d5,d0
  4155.  move.l d0,(a3)+
  4156.  dbra d7,loop3
  4157.  
  4158.  move.l pos2,a0
  4159.  move.l pos3,a1
  4160.  
  4161.  move.l Aupt3,a3
  4162.  move.l a3,$dff0c0
  4163.  move.l Auback3,Aupt3
  4164.  move.l a3,Auback3
  4165.  
  4166.  move.l #tab,a2
  4167.  
  4168.  moveq #0,d0
  4169.  moveq #0,d1
  4170.  move.b vol2right,d0
  4171.  move.b vol3right,d1
  4172.  cmp.b d1,d0
  4173.  slt.s swappedem
  4174.  bge.s fbig3
  4175.  
  4176.  exg a0,a1
  4177.  asl.w #6,d0
  4178.  divs d1,d0
  4179.  lsl.w #8,d0
  4180.  adda.w d0,a2
  4181.  move.w d1,$dff0c8
  4182.  bra.s donechan3
  4183.  
  4184. fbig3:
  4185.  tst.w d0
  4186.  beq.s donechan3
  4187.  asl.w #6,d1
  4188.  divs d0,d1
  4189.  lsl.w #8,d1
  4190.  adda.w d1,a2
  4191.  move.w d0,$dff0c8
  4192. donechan3:
  4193.  
  4194.  moveq #0,d0
  4195.  moveq #0,d1
  4196.  moveq #0,d2
  4197.  moveq #0,d3
  4198.  moveq #0,d4
  4199.  moveq #0,d5
  4200.  move.w #49,d7
  4201. loop4:
  4202.  move.l (a0)+,d0
  4203.  move.b (a1)+,d1
  4204.  move.b (a1)+,d2
  4205.  move.b (a1)+,d3
  4206.  move.b (a1)+,d4
  4207.  move.b (a2,d3.w),d5
  4208.  swap d5
  4209.  move.b (a2,d1.w),d5
  4210.  asl.l #8,d5
  4211.  move.b (a2,d2.w),d5
  4212.  swap d5
  4213.  move.b (a2,d4.w),d5
  4214.  add.l d5,d0
  4215.  move.l d0,(a3)+
  4216.  dbra d7,loop4
  4217.  
  4218.  tst.b swappedem
  4219.  beq.s ok23
  4220.  exg a0,a1
  4221. ok23:
  4222.  
  4223.  cmp.l Samp2end,a0
  4224.  blt.s notoffendsamp3
  4225.  move.l #empty,a0
  4226.  move.l #emptyend,Samp2end
  4227.  move.b #0,vol2left
  4228.  move.b #0,vol2right
  4229. notoffendsamp3:
  4230.  
  4231.  cmp.l Samp3end,a1
  4232.  blt.s notoffendsamp4
  4233.  move.l #empty,a1
  4234.  move.l #emptyend,Samp3end
  4235.  move.b #0,vol3left
  4236.  move.b #0,vol3right
  4237. notoffendsamp4:
  4238.  
  4239.  move.l a0,pos2
  4240.  move.l a1,pos3
  4241.  
  4242.  movem.l (a7)+,d0-d7/a0-a6
  4243.  tst.b counting
  4244.  beq .nostartcounter
  4245.  JSR STARTCOUNT
  4246. .nostartcounter:
  4247.  
  4248.  rte
  4249.  
  4250. ***********************************
  4251. * 4 channel sound routine
  4252. ***********************************
  4253.  
  4254. fourchannel:
  4255.  
  4256.  move.l #$dff000,a6
  4257.  
  4258.  btst #1,intreqr(a6)
  4259.  beq.s nofinish0
  4260.  move.l #null,$a0(a6)
  4261.  move.w #100,$a4(a6)
  4262.  tst.b backbeat
  4263.  beq.s nobeat
  4264.  
  4265.  move.l #bass,$a0(a6)
  4266.  move.w #18370/2,$a4(a6)
  4267.  move.w #64,$a8(a6)
  4268.  
  4269. nobeat:
  4270.  
  4271.  move.w #$0080,intreq(a6)
  4272. nofinish0:
  4273.  
  4274.  
  4275.  tst.b NoiseMade0p
  4276.  beq.s NoChan0sound
  4277.  
  4278.  move.l Samp0end,d0
  4279.  move.l pos0,d1
  4280.  sub.l d1,d0
  4281.  asr.w #1,d0
  4282.  move.w d0,$a4(a6)
  4283.  move.l d1,$a0(a6)
  4284.  move.w #$8201,dmacon(a6)
  4285.  moveq #0,d0
  4286.  move.b vol0left,d0
  4287.  add.b vol0right,d0
  4288.  asr.b #1,d0
  4289.  move.w d0,$a8(a6)
  4290.  
  4291. NoChan0sound:
  4292.  
  4293.  btst #0,intreqr(a6)
  4294.  beq.s nofinish1
  4295.  move.l #null,$b0(a6)
  4296.  move.w #100,$b4(a6)
  4297.  move.w #$0100,intreq(a6)
  4298. nofinish1:
  4299.  
  4300.  tst.b NoiseMade1p
  4301.  beq.s NoChan1sound
  4302.  
  4303.  move.l Samp1end,d0
  4304.  move.l pos1,d1
  4305.  sub.l d1,d0
  4306.  asr.w #1,d0
  4307.  move.w d0,$b4(a6)
  4308.  move.l d1,$b0(a6)
  4309.  move.w #$8202,dmacon(a6)
  4310.  moveq #0,d0
  4311.  move.b vol1left,d0
  4312.  add.b vol1right,d0
  4313.  asr.b #1,d0
  4314.  move.w d0,$b8(a6)
  4315.  
  4316. NoChan1sound:
  4317.  
  4318.  
  4319.  btst #1,intreqr(a6)
  4320.  beq.s nofinish2
  4321.  move.l #null,$c0(a6)
  4322.  move.w #100,$c4(a6)
  4323.  move.w #$0200,intreq(a6)
  4324. nofinish2:
  4325.  
  4326.  tst.b NoiseMade2p
  4327.  beq.s NoChan2sound
  4328.  
  4329.  move.l Samp2end,d0
  4330.  move.l pos2,d1
  4331.  sub.l d1,d0
  4332.  asr.w #1,d0
  4333.  move.w d0,$c4(a6)
  4334.  move.l d1,$c0(a6)
  4335.  move.w #$8204,dmacon(a6)
  4336.  moveq #0,d0
  4337.  move.b vol2left,d0
  4338.  add.b vol2right,d0
  4339.  asr.b #1,d0
  4340.  move.w d0,$c8(a6)
  4341.  
  4342. NoChan2sound:
  4343.  
  4344.  btst #2,intreqr(a6)
  4345.  beq.s nofinish3
  4346.  move.l #null,$d0(a6)
  4347.  move.w #100,$d4(a6)
  4348.  move.w #$0400,intreq(a6)
  4349. nofinish3:
  4350.  
  4351.  tst.b NoiseMade3p
  4352.  beq.s NoChan3sound
  4353.  
  4354.  move.l Samp3end,d0
  4355.  move.l pos3,d1
  4356.  sub.l d1,d0
  4357.  asr.w #1,d0
  4358.  move.w d0,$d4(a6)
  4359.  move.l d1,$d0(a6)
  4360.  move.w #$8208,dmacon(a6)
  4361.  moveq #0,d0
  4362.  move.b vol2left,d0
  4363.  add.b vol2right,d0
  4364.  asr.b #1,d0
  4365.  move.w d0,$d8(a6)
  4366.  
  4367. NoChan3sound:
  4368.  
  4369. nomorechannels:
  4370.  
  4371.  move.l NoiseMade0,NoiseMade0p
  4372.  move.l #0,NoiseMade0
  4373.  
  4374.  movem.l (a7)+,d0-d7/a0-a6
  4375.  tst.b counting
  4376.  beq .nostartcounter
  4377.  JSR STARTCOUNT
  4378. .nostartcounter:
  4379.  
  4380.  rte
  4381.  
  4382. backbeat: dc.w 0
  4383.  
  4384. Samp0end: dc.l emptyend
  4385. Samp1end: dc.l emptyend
  4386. Samp2end: dc.l emptyend
  4387. Samp3end: dc.l emptyend
  4388.  
  4389. Aupt0: dc.l null
  4390. Auback0: dc.l null+500
  4391. Aupt2: dc.l null3
  4392. Auback2: dc.l null3+500
  4393. Aupt3: dc.l null4
  4394. Auback3: dc.l null4+500
  4395. Aupt1: dc.l null2
  4396. Auback1: dc.l null2+500
  4397.  
  4398. NoiseMade0: dc.b 0
  4399. NoiseMade1: dc.b 0
  4400. NoiseMade2: dc.b 0
  4401. NoiseMade3: dc.b 0
  4402. NoiseMade0p: dc.b 0
  4403. NoiseMade1p: dc.b 0
  4404. NoiseMade2p: dc.b 0
  4405. NoiseMade3p: dc.b 0
  4406.  
  4407. empty: ds.l 100
  4408. emptyend:
  4409.  
  4410. **************************************
  4411. * I want a routine to calculate all the
  4412. * info needed for the sound player to
  4413. * work, given say position of noise, volume
  4414. * and sample number.
  4415.  
  4416. Samplenum: dc.w 0
  4417. Noisex: dc.w 0
  4418. Noisez: dc.w 0
  4419. Noisevol: dc.w 0
  4420. chanpick: dc.w 0
  4421.  
  4422. MakeSomeNoise:
  4423.  
  4424.  move.w Noisex,d1
  4425.  muls d1,d1
  4426.  move.w Noisez,d2
  4427.  muls d2,d2
  4428.  move.w #64,d3
  4429.  moveq #1,d0
  4430.  add.l d1,d2
  4431.  beq pastcalc
  4432.  
  4433.  move.w #31,d0
  4434. .findhigh
  4435.  btst d0,d2
  4436.  bne .foundhigh
  4437.  dbra d0,.findhigh
  4438. .foundhigh
  4439.  asr.w #1,d0
  4440.  clr.l d3
  4441.  bset d0,d3
  4442.  move.l d3,d0
  4443.  
  4444.  move.w d0,d3
  4445.  muls d3,d3    ; x*x
  4446.  sub.l d2,d3    ; x*x-a
  4447.  asr.l #1,d3    ; (x*x-a)/2
  4448.  divs d0,d3    ; (x*x-a)/2x
  4449.  sub.w d3,d0    ; second approx
  4450.  bgt .stillnot0
  4451.  move.w #1,d0
  4452. .stillnot0
  4453.  
  4454.  move.w d0,d3
  4455.  muls d3,d3
  4456.  sub.l d2,d3
  4457.  asr.l #1,d3
  4458.  divs d0,d3
  4459.  sub.w d3,d0    ; second approx
  4460.  bgt .stillnot02
  4461.  move.w #1,d0
  4462. .stillnot02
  4463.  
  4464.  move.w #64,d3
  4465.  muls Noisevol,d3
  4466.  asr.w #1,d0
  4467.  addq #1,d0
  4468.  divs d0,d3
  4469.  
  4470.  cmp.w #64,d3
  4471.  ble.s notooloud
  4472.  move.w #64,d3
  4473. notooloud:
  4474.  
  4475. pastcalc:
  4476.  
  4477.     ; d3 contains volume of noise.
  4478.     
  4479.  move.w d3,d4
  4480.  
  4481.  move.w d3,d2
  4482.  muls Noisex,d2
  4483.  add.w d0,d0
  4484.  divs d0,d2
  4485.  
  4486.  bgt.s quietleft
  4487.  add.w d2,d4
  4488.  bge.s donequiet
  4489.  move.w #0,d4
  4490.  bra.s donequiet
  4491. quietleft:
  4492.  sub.w d2,d3
  4493.  bge.s donequiet
  4494.  move.w #0,d3
  4495. donequiet:
  4496.  
  4497. ; d3=leftvol?
  4498. ; d4=rightvol?
  4499.  
  4500. Recordednoise:
  4501.  move.l #SampleList,a3
  4502.  
  4503.  tst.b chanpick
  4504.  seq NoiseMade0
  4505.  beq.s chan0
  4506.  cmp.b #1,chanpick
  4507.  seq NoiseMade1
  4508.  beq chan1
  4509.  cmp.b #2,chanpick
  4510.  seq NoiseMade2
  4511.  beq chan2
  4512.  st NoiseMade3
  4513.  
  4514.  move.w Samplenum,d0
  4515.  move.l (a3,d0.w*8),a1
  4516.  move.l 4(a3,d0.w*8),a2
  4517.  
  4518.  move.b d3,vol3left
  4519.  move.b d4,vol3right
  4520.  move.l a1,pos3
  4521.  move.l a2,Samp3end
  4522.  
  4523.  rts
  4524.  
  4525. chan0: 
  4526.  move.w Samplenum,d0
  4527.  move.l (a3,d0.w*8),a1
  4528.  move.l 4(a3,d0.w*8),a2
  4529.  move.l a1,pos0
  4530.  move.l a2,Samp0end
  4531.  move.b d3,vol0left
  4532.  move.b d4,vol0right
  4533.  
  4534.  rts
  4535.  
  4536. chan1:
  4537.  
  4538.  move.w Samplenum,d0
  4539.  move.l (a3,d0.w*8),a1
  4540.  move.l 4(a3,d0.w*8),a2
  4541.  move.b d3,vol1left
  4542.  move.b d4,vol1right
  4543.  move.l a1,pos1
  4544.  move.l a2,Samp1end
  4545.  
  4546.  rts
  4547.  
  4548. chan2: 
  4549.  move.w Samplenum,d0
  4550.  move.l (a3,d0.w*8),a1
  4551.  move.l 4(a3,d0.w*8),a2
  4552.  move.l a1,pos2
  4553.  move.l a2,Samp2end
  4554.  move.b d3,vol2left
  4555.  move.b d4,vol2right
  4556.  
  4557.  rts
  4558.  
  4559. SampleList
  4560.  dc.l Scream,EndScream
  4561.  dc.l Shoot,EndShoot
  4562.  dc.l Munch,EndMunch
  4563.  dc.l PooGun,EndPooGun
  4564.  dc.l Collect,EndCollect
  4565.  dc.l DoorNoise,EndDoorNoise
  4566.  dc.l bass,bassend
  4567.  dc.l Stomp,EndStomp
  4568.  dc.l LowScream,EndLowScream
  4569.  dc.l BaddieGun,EndBaddieGun
  4570.  
  4571. saveinters:  
  4572.  dc.w 0
  4573.  
  4574. z: dc.w 10
  4575.  
  4576. notifplaying:
  4577.  dc.w 0
  4578.  
  4579. audpos1: dc.w 0
  4580. audpos1b: dc.w 0
  4581. audpos2: dc.w 0
  4582. audpos2b: dc.w 0
  4583. audpos3: dc.w 0
  4584. audpos3b: dc.w 0
  4585. audpos4: dc.w 0
  4586. audpos4b: dc.w 0
  4587.  
  4588. vol0left: dc.w 0
  4589. vol0right: dc.w 0
  4590. vol1left: dc.w 0
  4591. vol1right: dc.w 0
  4592. vol2left: dc.w 0
  4593. vol2right: dc.w 0
  4594. vol3left: dc.w 0
  4595. vol3right: dc.w 0
  4596.  
  4597. pos: dc.l 0
  4598.  
  4599. pos0: dc.l empty
  4600. pos1: dc.l empty
  4601. pos2: dc.l empty
  4602. pos3: dc.l empty
  4603.  
  4604.  
  4605. numtodo dc.w 0
  4606.  
  4607. npt: dc.w 0
  4608.  
  4609. pretab:
  4610. val SET 0
  4611.  REPT 128
  4612.  dc.b val
  4613. val SET val+1
  4614.  ENDR
  4615. val SET -128
  4616.  REPT 128
  4617.  dc.b val
  4618. val SET val+1
  4619.  ENDR 
  4620.  
  4621. tab:
  4622.  ds.b 256*65
  4623.  
  4624.  
  4625. test: dc.l 0
  4626.  ds.l 30
  4627.  
  4628.  even
  4629. ConstCols:
  4630.  incbin "ConstCols"
  4631.  even
  4632. Smoothscalecols:
  4633. ; incbin "smoothbumppalscaled"
  4634.  even
  4635. SmoothTile:
  4636. ; incbin "smoothbumptile"
  4637.  even
  4638. Bumpscalecols:
  4639. ; incbin "Bumppalscaled"
  4640.  even
  4641. Bumptile:
  4642. ; incbin "bumptile"
  4643.  even
  4644. scalecols: incbin "bytepixpalscaled"
  4645.  even
  4646. floorscalecols: incbin "floorpalscaled"
  4647.  even
  4648. walltiles:
  4649.  incbin "bytepixfile"
  4650.  even
  4651. floortile:
  4652.  incbin "floortile" 
  4653.  even
  4654. wallrouts:
  4655. ; incbin "2x2WallDraw" 
  4656.  CNOP 0,64
  4657. BackPicture:
  4658.  incbin "backfile"
  4659. EndBackPicture:
  4660.  
  4661. drawpt: dc.l colbars2
  4662. olddrawpt: dc.l colbars
  4663. frompt: dc.l 0 
  4664.  
  4665. SineTable:
  4666.  incbin "bigsine"
  4667.  
  4668. angpos: dc.w 0
  4669. angspd: dc.w 0
  4670. flooryoff: dc.w 0
  4671. xoff: dc.l 0
  4672. yoff: dc.l 0
  4673. yvel: dc.l 0
  4674. zoff: dc.l 0
  4675. tyoff: dc.l 0
  4676. xspdval: dc.l 0
  4677. zspdval: dc.l 0
  4678. Zone: dc.w 0
  4679.  
  4680. PLR1: dc.b $ff
  4681.  even
  4682. PLR1_cosval: dc.w 0
  4683. PLR1_sinval: dc.w 0
  4684. PLR1_angpos: dc.w 0
  4685. PLR1_angspd: dc.w 0
  4686. PLR1_xoff: dc.l 0
  4687. PLR1_yoff: dc.l 0
  4688. PLR1_yvel: dc.l 0
  4689. PLR1_zoff: dc.l 0
  4690. PLR1_tyoff: dc.l 0
  4691. PLR1_xspdval: dc.l 0
  4692. PLR1_zspdval: dc.l 0
  4693. PLR1_Zone: dc.w 0
  4694. PLR1_Roompt: dc.l 0
  4695. PLR1_OldRoompt: dc.l 0
  4696. PLR1_PointsToRotatePtr: dc.l 0
  4697. PLR1_ListOfGraphRooms: dc.l 0
  4698. PLR1_oldxoff: dc.l 0
  4699. PLR1_oldzoff: dc.l 0
  4700.  
  4701.  ds.w 4
  4702.  
  4703. PLR1s_cosval: dc.w 0
  4704. PLR1s_sinval: dc.w 0
  4705. PLR1s_angpos: dc.w 0
  4706. PLR1s_angspd: dc.w 0
  4707. PLR1s_xoff: dc.l 0
  4708. PLR1s_yoff: dc.l 0
  4709. PLR1s_yvel: dc.l 0
  4710. PLR1s_zoff: dc.l 0
  4711. PLR1s_tyoff: dc.l 0
  4712. PLR1s_xspdval: dc.l 0
  4713. PLR1s_zspdval: dc.l 0
  4714. PLR1s_Zone: dc.w 0
  4715. PLR1s_Roompt: dc.l 0
  4716. PLR1s_OldRoompt: dc.l 0
  4717. PLR1s_PointsToRotatePtr: dc.l 0
  4718. PLR1s_ListOfGraphRooms: dc.l 0
  4719. PLR1s_oldxoff: dc.l 0
  4720. PLR1s_oldzoff: dc.l 0
  4721.  
  4722.  ds.w 4
  4723.  
  4724. PLR2: dc.b $0
  4725.  even
  4726. PLR2_cosval: dc.w 0
  4727. PLR2_sinval: dc.w 0
  4728. PLR2_angpos: dc.w 0
  4729. PLR2_angspd: dc.w 0
  4730. PLR2_xoff: dc.l 0
  4731. PLR2_yoff: dc.l 0
  4732. PLR2_yvel: dc.l 0
  4733. PLR2_zoff: dc.l 0
  4734. PLR2_tyoff: dc.l 0
  4735. PLR2_xspdval: dc.l 0
  4736. PLR2_zspdval: dc.l 0
  4737. PLR2_Zone: dc.w 0
  4738. PLR2_Roompt: dc.l 0
  4739. PLR2_OldRoompt: dc.l 0
  4740. PLR2_PointsToRotatePtr: dc.l 0
  4741. PLR2_ListOfGraphRooms: dc.l 0
  4742. PLR2_ForwardSpd: dc.w 0
  4743.  
  4744. liftanimtab:
  4745.  
  4746. endliftanimtab:
  4747.  
  4748. glassball: incbin "glassball.inc"
  4749. endglass
  4750. glassballpt: dc.l glassball
  4751.  
  4752. rndtab: ; incbin "randfile"
  4753. endrnd: 
  4754.  
  4755. brightanimtab:
  4756.  dcb.w 200,20
  4757.  dc.w 5
  4758.  dc.w 10,20
  4759.  dc.w 5
  4760.  dcb.w 30,20
  4761.  dc.w 7,10,10,5,10,0,5,6,5,6,5,6,5,6,0
  4762.  dcb.w 40,0
  4763.  dc.w 1,2,3,2,3,2,3,2,3,2,3,2,3,0
  4764.  dcb.w 300,0
  4765.  dc.w 1,0,1,0,2,2,2,5,5,5,5,5,5,5,5,5,6,10
  4766.  dc.w -1
  4767.  
  4768. Roompt: dc.l 0
  4769. OldRoompt: dc.l 0
  4770.  
  4771. *****************************************************************
  4772.  *
  4773.  include "AB3:source/LevelData2"
  4774.  *
  4775. *****************************************************************
  4776.  
  4777.  
  4778. wallpt: dc.l 0
  4779. floorpt: dc.l 0
  4780.  
  4781. Rotated:
  4782.  ds.l 800 
  4783. ObjRotated:
  4784.  ds.l 800
  4785.  
  4786. OnScreen:
  4787.  ds.l 800 
  4788.  
  4789. startwait: dc.w 0
  4790. endwait: dc.w 0
  4791.  
  4792. Faces: incbin "faces2raw"
  4793.  
  4794. *******************************************************************
  4795.  
  4796. consttab:
  4797.  incbin "constantfile"
  4798.  
  4799. *******************************************************************
  4800.  
  4801. darkentab: incbin "darkenedcols"
  4802. brightentab: incbin "brightenfile"
  4803. WorkSpace:
  4804.  ds.l 8192 
  4805. waterfile: incbin "waterfile"
  4806. RecordBuffer: incbin "ab3:includes/EDIT1"
  4807. EndRecordBuffer:
  4808.  even
  4809. RecordPtr: dc.l RecordBuffer+6
  4810. StartRecordPtr: dc.l RecordBuffer 
  4811.  
  4812.  SECTION ffff,CODE_C
  4813.  
  4814. nullspr: dc.l 0
  4815.  
  4816.  cnop 0,8
  4817. borders:
  4818.  incbin "borderspr"
  4819.  
  4820. null: ds.w 500
  4821. null2: ds.w 500
  4822. null3: ds.w 500
  4823. null4: ds.w 500
  4824.  
  4825.  
  4826. Blurbfield:
  4827.  
  4828.  dc.w intreq,$8011
  4829.  dc.w bpl1ptl
  4830. bl1l: dc.w 0
  4831.  dc.w bpl1pth
  4832. bl1h: dc.w 0
  4833.  
  4834.  dc.w diwstart,$2c81
  4835.  dc.w diwstop,$1cc1
  4836.  dc.w ddfstart,$38
  4837.  dc.w ddfstop,$b8
  4838.  dc.w bplcon0,$9201
  4839.  dc.w bplcon1,0
  4840.  dc.w $106,$c40
  4841. blcols:
  4842.  dc.w col0,0
  4843.  dc.w col1,$fff
  4844.  
  4845.  dc.w $108,0
  4846.  dc.w $10a,0
  4847.  
  4848.  dc.w $ffff,$fffe
  4849.  dc.w $ffff,$fffe
  4850.  
  4851. bigfield:    
  4852.                 ; Start of our copper list.
  4853.  
  4854.  dc.w dmacon,$8020
  4855.  dc.w intreq,$8011
  4856.  dc.w $1fc,$7
  4857.  dc.w diwstart
  4858. winstart: dc.w $2cb1
  4859.  dc.w diwstop
  4860. winstop: dc.w $2c91
  4861.  dc.w ddfstart
  4862. fetchstart: dc.w $48
  4863.  dc.w ddfstop
  4864. fetchstop: dc.w $88
  4865.  
  4866.  dc.w spr0ptl
  4867. s0l:
  4868.  dc.w 0
  4869.  dc.w spr0pth
  4870. s0h:
  4871.  dc.w 0
  4872.  dc.w spr1ptl
  4873. s1l:
  4874.  dc.w 0
  4875.  dc.w spr1pth
  4876. s1h:
  4877.  dc.w 0
  4878.  dc.w spr2ptl
  4879. s2l:
  4880.  dc.w 0
  4881.  dc.w spr2pth
  4882. s2h:
  4883.  dc.w 0
  4884.  dc.w spr3ptl
  4885. s3l:
  4886.  dc.w 0
  4887.  dc.w spr3pth
  4888. s3h:
  4889.  dc.w 0
  4890.  dc.w spr4ptl
  4891. s4l:
  4892.  dc.w 0
  4893.  dc.w spr4pth
  4894. s4h:
  4895.  dc.w 0
  4896.  dc.w spr5ptl
  4897. s5l:
  4898.  dc.w 0
  4899.  dc.w spr5pth
  4900. s5h:
  4901.  dc.w 0
  4902.  dc.w spr6ptl
  4903. s6l:
  4904.  dc.w 0
  4905.  dc.w spr6pth
  4906. s6h:
  4907.  dc.w 0
  4908.  dc.w spr7ptl
  4909. s7l:
  4910.  dc.w 0
  4911.  dc.w spr7pth
  4912. s7h:
  4913.  dc.w 0
  4914.  
  4915.  dc.w $106,$8c42
  4916.  dc.w col0,$0
  4917.  dc.w $106,$c42
  4918.  dc.w col0,0
  4919.  
  4920.  dc.w $106,$c42
  4921.  incbin "borderpal"
  4922.  
  4923.  dc.w bplcon0,$7201
  4924.  dc.w bplcon1
  4925. smoff:
  4926.  dc.w $0
  4927.  
  4928.  dc.w $108
  4929. modulo: dc.w -24
  4930.  dc.w $10a,-24
  4931.  
  4932.  dc.w bpl1pth
  4933. pl1h
  4934.  dc.w 0
  4935.  
  4936.  dc.w bpl1ptl
  4937. pl1l
  4938.  dc.w 0
  4939.  
  4940.  dc.w bpl2pth
  4941. pl2h
  4942.  dc.w 0
  4943.  
  4944.  dc.w bpl2ptl
  4945. pl2l
  4946.  dc.w 0
  4947.  
  4948.  dc.w bpl3pth
  4949. pl3h
  4950.  dc.w 0
  4951.  
  4952.  dc.w bpl3ptl
  4953. pl3l
  4954.  dc.w 0
  4955.  
  4956.  dc.w bpl4pth
  4957. pl4h
  4958.  dc.w 0
  4959.  
  4960.  dc.w bpl4ptl
  4961. pl4l
  4962.  dc.w 0
  4963.  
  4964.  dc.w bpl5pth
  4965. pl5h
  4966.  dc.w 0
  4967.  
  4968.  dc.w bpl5ptl
  4969. pl5l
  4970.  dc.w 0
  4971.  
  4972.  dc.w bpl6pth
  4973. pl6h
  4974.  dc.w 0
  4975.  
  4976.  dc.w bpl6ptl
  4977. pl6l
  4978.  dc.w 0
  4979.  
  4980.  dc.w bpl7pth
  4981. pl7h
  4982.  dc.w 0
  4983.  
  4984.  dc.w bpl7ptl
  4985. pl7l
  4986.  dc.w 0
  4987.  
  4988.  
  4989.  dc.w $1001,$ff00
  4990.  dc.w intreq,$11
  4991. yposcop:
  4992.  dc.w $2a11,$fffe
  4993.  dc.w $8a,0
  4994.  
  4995.  ds.l 104*10
  4996.  
  4997. colbars:
  4998. val SET $2a
  4999.  dcb.l 104*scrheight,$1fe0000
  5000.  dc.w $106,$c42
  5001.  
  5002.  dc.w $80
  5003. pch1:
  5004.  dc.w 0
  5005.  dc.w $82
  5006. pcl1:
  5007.  dc.w 0 
  5008.  dc.w $88,0
  5009.  
  5010.  dc.w $ffff,$fffe       ; End copper list.
  5011.  
  5012.  ds.l 104*10
  5013.  
  5014. colbars2:
  5015. val SET $2a
  5016.  dcb.l 104*scrheight,$1fe0000
  5017.  
  5018.  dc.w $106,$c42
  5019.  
  5020.  dc.w $80
  5021. pch2:
  5022.  dc.w 0
  5023.  dc.w $82
  5024. pcl2:
  5025.  dc.w 0
  5026.  
  5027.  dc.w $88,0
  5028.  
  5029.  dc.w $ffff,$fffe       ; End copper list.
  5030.  
  5031.  ds.l 104*10
  5032.  
  5033. old: dc.l 0
  5034.  
  5035. PanelCop:
  5036.  
  5037.  dc.w bplcon0,1
  5038.  
  5039.  dc.w $106,$c42
  5040.  dc.w $10c,1
  5041.  dc.w $10e,0
  5042.  
  5043.  incbin "Panelcols"
  5044.  
  5045.  dc.w $108,0
  5046.  dc.w $10a,0
  5047.  
  5048.  dc.w bpl1pth
  5049. p1h
  5050.  dc.w 0
  5051.  
  5052.  dc.w bpl1ptl
  5053. p1l
  5054.  dc.w 0
  5055.  
  5056.  dc.w bpl2pth
  5057. p2h
  5058.  dc.w 0
  5059.  
  5060.  dc.w bpl2ptl
  5061. p2l
  5062.  dc.w 0
  5063.  
  5064.  dc.w bpl3pth
  5065. p3h
  5066.  dc.w 0
  5067.  
  5068.  dc.w bpl3ptl
  5069. p3l
  5070.  dc.w 0
  5071.  
  5072.  dc.w bpl4pth
  5073. p4h
  5074.  dc.w 0
  5075.  dc.w bpl4ptl
  5076. p4l
  5077.  dc.w 0
  5078.  dc.w bpl5pth
  5079. p5h
  5080.  dc.w 0
  5081.  dc.w bpl5ptl
  5082. p5l
  5083.  dc.w 0
  5084.  
  5085.  dc.w $80
  5086. och:
  5087.  dc.w 0
  5088.  dc.w $82
  5089. ocl:
  5090.  dc.w 0
  5091.  
  5092.  dc.w $106,$2c40
  5093.  incbin "borderpal"
  5094.  dc.w $10c,$3
  5095.  dc.w $106,$c40
  5096.  
  5097.  dc.w $cf01,$ff00
  5098.  dc.w bplcon0
  5099. Panelcon: dc.w $5201
  5100.  dc.w $180,$fff
  5101.  
  5102.  dc.w $f801,$ff00
  5103.  dc.w col1,$50
  5104.  dc.w $f901,$ff00
  5105.  dc.w col1,$90
  5106.  dc.w $fa01,$ff00
  5107.  dc.w col1,$f0
  5108.  dc.w $fb01,$ff00
  5109.  dc.w col1,$f0
  5110.  dc.w $fc01,$ff00
  5111.  dc.w col1,$90
  5112.  dc.w $fd01,$ff00
  5113.  dc.w col1,$50
  5114.  
  5115.  dc.w $fe01,$ff00
  5116.  dc.w col1,$fff
  5117.  
  5118.  dc.w $ffdf,$fffe
  5119.  dc.w $a01,$ff00
  5120.  dc.w bplcon0,$201
  5121.  
  5122.  incbin "faces2cols"
  5123.  dc.w bpl1pth
  5124. f1h
  5125.  dc.w 0
  5126.  
  5127.  dc.w bpl1ptl
  5128. f1l
  5129.  dc.w 0
  5130.  
  5131.  dc.w bpl2pth
  5132. f2h
  5133.  dc.w 0
  5134.  
  5135.  dc.w bpl2ptl
  5136. f2l
  5137.  dc.w 0
  5138.  
  5139.  dc.w bpl3pth
  5140. f3h
  5141.  dc.w 0
  5142.  
  5143.  dc.w bpl3ptl
  5144. f3l
  5145.  dc.w 0
  5146.  
  5147.  dc.w bpl4pth
  5148. f4h
  5149.  dc.w 0
  5150.  dc.w bpl4ptl
  5151. f4l
  5152.  dc.w 0
  5153.  
  5154.  dc.w bpl5pth
  5155. f5h
  5156.  dc.w 0
  5157.  dc.w bpl5ptl
  5158. f5l
  5159.  dc.w 0
  5160.  
  5161.  dc.w $0c01,$ff00
  5162.  dc.w bplcon0,$5201
  5163.   
  5164.  dc.w $ffff,$fffe
  5165.  
  5166.  cnop 0,64
  5167. FacePlace:
  5168.  ds.l 6*32*5
  5169.  
  5170.  
  5171. ********************************************
  5172. * Stuff you don't have to worry about yet. *
  5173. ********************************************
  5174.  
  5175. closeeverything:
  5176.  
  5177.  move.l #$dff000,a6
  5178.  move.l old,$dff080     ; Restore old copper list.
  5179.  move.l old,d0
  5180.  move.w d0,ocl
  5181.  swap d0
  5182.  move.w d0,och
  5183.  move.w #$8020,dmacon(a6)
  5184.  move.w #$f,dmacon(a6)
  5185.  move.l saveit,$6c.w
  5186.  move.l OLDKINT,$68.w
  5187.  move.w saveinters,d0
  5188.  or.w #$c000,d0
  5189.  move.w d0,intena(a6)
  5190.  clr.w $dff0a8
  5191.  clr.w $dff0b8
  5192.  clr.w $dff0c8
  5193.  clr.w $dff0d8
  5194.  
  5195. ; move.w #3,d0
  5196. ;nonewvbl
  5197. ; btst #5,intreqrl(a6)
  5198. ; beq.s nonewvbl
  5199. ; move.w #$20,intreq(a6)
  5200. ; dbra d0,nonewvbl
  5201.  
  5202. ; move.l oldview,a1
  5203. ; move.l a1,d0
  5204. ; move.l gfxbase,a6
  5205. ; jsr -$de(a6)
  5206.  
  5207.  move.l gfxbase,d0
  5208.  move.l d0,a1
  5209.  move.l 4.w,a6
  5210.  jsr CloseLib(a6)
  5211.  
  5212.  cmp.b #'t',option+1
  5213.  beq.s leaveold
  5214.  move.w #$f8e,$dff1dc
  5215. leaveold:
  5216.  
  5217.  rte
  5218.  
  5219. gfxbase: dc.l 0
  5220. oldview: dc.l 0
  5221.  
  5222. stuff:
  5223.  
  5224.     Lea    gfxname(pc),a1    
  5225.     Moveq.l    #0,d0
  5226.     Move.l    $4.w,a6    
  5227.     Jsr    -$228(a6)
  5228.     Move.l     d0,gfxbase
  5229.     Move.l    d0,a6                Use As Base Reg
  5230.     Move.l    34(a6),oldview
  5231.     move.l 38(a6),old
  5232.  
  5233.  jmp endstuff
  5234.  
  5235. gfxname dc.b "graphics.library",0
  5236.  
  5237.  even
  5238.  
  5239.  
  5240.  cnop 0,64
  5241.  
  5242. Panel:
  5243.  incbin "PanelRaw"
  5244.  
  5245. Blurb: incbin "blurbpic"
  5246.  
  5247. TimerScr: ds.b 40*64
  5248.  
  5249. scrntab:
  5250.  ds.b 16
  5251. val SET 32
  5252.  REPT 96
  5253.  dc.b val,val,val
  5254. val SET val+1
  5255.  ENDR
  5256.  ds.b 16
  5257.  
  5258.  cnop 0,64
  5259. scrn:
  5260.  
  5261.  dcb.l 8,$33333333
  5262.  dc.l 0
  5263.  dc.l 0
  5264.  
  5265.  dcb.l 8,$0f0f0f0f
  5266.  dc.l 0
  5267.  dc.l 0
  5268.  
  5269.  dcb.l 8,$00ff00ff
  5270.  dc.l 0
  5271.  dc.l 0
  5272.  
  5273.  dcb.l 8,$0000ffff
  5274.  dc.l 0
  5275.  dc.l 0
  5276.  
  5277.  dc.l 0,-1,0,-1,0,-1,0,-1
  5278.  dc.l 0
  5279.  dc.l 0
  5280.  
  5281.  dc.l -1,-1,0,0,-1,-1,0,0
  5282.  dc.l 0
  5283.  dc.l 0
  5284.  
  5285.  dc.l 0,0,-1,-1,-1,-1,-1,-1
  5286.  dc.l 0
  5287.  dc.l 0
  5288.  
  5289. NumTimes: dc.l 0
  5290. TimeCount: dc.l 0
  5291. oldtime: dc.l 0
  5292. counting: dc.b 0
  5293. oktodisplay: dc.b 0
  5294.  
  5295. INITTIMER:
  5296.  move.l #0,TimeCount
  5297.  move.l #0,NumTimes
  5298.  rts
  5299.  
  5300. STARTCOUNT:
  5301.  move.l d0,-(a7)
  5302.  move.l $dff004,d0
  5303.  and.l #$1ffff,d0
  5304.  move.l d0,oldtime
  5305.  st counting
  5306.  move.l (a7)+,d0
  5307.  rts
  5308.  
  5309. STOPCOUNT:
  5310.  move.l d0,-(a7)
  5311.  move.l $dff004,d0
  5312.  and.l #$1ffff,d0
  5313.  
  5314.  sub.l oldtime,d0
  5315.  cmp.l #-256,d0
  5316.  bge.s okcount
  5317.  add.l #313*256,d0
  5318. okcount:
  5319.  add.l d0,TimeCount
  5320.  addq.l #1,NumTimes
  5321.  clr.b counting
  5322.  move.l (a7)+,d0
  5323.  rts
  5324.  
  5325. STOPCOUNTNOADD:
  5326.  move.l d0,-(a7)
  5327.  move.l $dff004,d0
  5328.  and.l #$1ffff,d0
  5329.  
  5330.  sub.l oldtime,d0
  5331.  cmp.l #-256,d0
  5332.  bge.s okcount2
  5333.  add.l #313*256,d0
  5334. okcount2:
  5335.  add.l d0,TimeCount
  5336.  clr.b counting
  5337.  move.l (a7)+,d0
  5338.  rts
  5339.  
  5340. maxbot: dc.w 0
  5341. tstneg: dc.l 0
  5342.  
  5343. STOPTIMER:
  5344.  st oktodisplay
  5345.  rts
  5346.  
  5347. digits: incbin "numbers.inc"
  5348.  
  5349. SPEEDTABLE: ds.w 300
  5350. ENDSPD:
  5351.  
  5352.  Section Sounds,CODE_C
  5353.  
  5354. Scream: incbin "ab3:sounds/Scream"
  5355.  ds.w 100
  5356. EndScream:
  5357. LowScream: incbin "ab3:sounds/LowScream"
  5358.  ds.w 100
  5359. EndLowScream:
  5360. BaddieGun: incbin "ab3:sounds/BaddieGun"
  5361. EndBaddieGun:
  5362. bass: incbin "ab3:sounds/backbass+drum"
  5363. bassend:
  5364. Shoot: incbin "ab3:sounds/fire!"
  5365. EndShoot:
  5366. Munch: incbin "ab3:sounds/munch"
  5367. EndMunch:
  5368. PooGun: incbin "ab3:sounds/shoot.dm"
  5369. EndPooGun:
  5370. Collect: incbin "ab3:sounds/collect"
  5371. EndCollect:
  5372. DoorNoise: incbin "ab3:sounds/door"
  5373. EndDoorNoise:
  5374. Stomp: incbin "ab3:sounds/footstep3"
  5375. EndStomp:
  5376.